JAVA基础 day26 正则表达式的简单学习

正则表达式

对字符串操作的一种逻辑公式。就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤。

java API中有正则表达式符号所代表的含义。

匹配:

[ ]内只表示一位。
String类中的matches方法,用正则表达式规则匹配字符串,只要有一处不同就返回false。

编写正则表达式,来过滤QQ号,QQ号第一位不能是0,五位到12位之间,只能是数字。

class RegexDemo
{
    public static void main(String[]args)
    {
        match();
    }
    public static void match()
    {
        String qq="452111a111";
        String regex="[1-9]\\d{4,11}";//[1-9]表示第一位是1到9,\d表示数字,java中\表示转义字符,所以需要\\d,数后跟{4,11}说明后面的数字至少4位,最多11位
        System.out.println(qq.matches(regex));
    }
}

切割

String类中的split方法,可以按照正则表达式对字符串进行切割。

class RegexDemo
{
    public static void main(String[]args)
    {
        splitDemo();
    }

    public static void splitDemo()
    {
        //String str="wangwu.lisi.gyt";//按照.进行切割,.在正则表达式中有任意字符的意义,所有需要加\
        //String regex="\\.";
        String str="vdsfgaaetregmqqfosdzzgdf";//分割叠字
        String regex="(.)\\1";//(.)小括号定义为组,\n则可以引用组的内容,,组从1开始计数,这里的\1指用来引用第一组的值。
        String[]arr=str.split(regex);
        for(String x:arr)
        {
            System.out.println(x);
        }
    }
}

替换

String类中的replaceAll方法,把符合正则表达式的字符串给替换成指定的内容

class RegexDemo
{
    public static void main(String[]args)
    {
        replaceAllDemo();
    }
    public static void replaceAllDemo()
    {
        /*String str="sdfds4984561sdf78984121sdasyh594315";
        String regex="\\d{5,}"; 
        String newstr="#";
        str=str.replaceAll(regex,newstr);//将字符串中的数字替换成#
        System.out.println(str);*/  

        String str="erkkkdsdfqqqqqfdsfsuyzzgfdsggggg";
        String regex="(.)\\1+";
        String newstr="$1";
        str=str.replaceAll(regex,newstr);
        System.out.println(str);//将重复的字符替换成一个字符,$n 取正则表达式中的组。

    }
}

获取

Pattern类
正则表达式的编译表示形式。

指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。

Matchar类中有更多的关于正则表达式的方法。

import java.util.regex.*;
class RegexDemo
{
    public static void main(String[]args)
    {
        getDemo();
    }
    public static void getDemo()
    {
        String str="hello my name is cui i come from china.";
        String regex="\\b[a-zA-Z]{4}\\b";
        Pattern p=Pattern.compile(regex);//将正则表达式封装成Pattern对象
        Matcher m=p.matcher(str);//将此正则表达式对象与要匹配的字符串关联,得到Matcher对象。
        while(m.find())//用Matcher中的find方法寻找是否有符合正则表达式的字符串
        {
            System.out.println(m.group());//进行取出
            System.out.println(m.start()+"----"+m.end());
        }       
    }
}

编程:利用正则表达式对一串IP字符串进行排序。

思路:按空格分隔,然后相比,有可能会出现 10和2的比较,但因为是一位一位比,所以10会在2字段的前面,所以我们需要把所有字段变为三位,进行比较。

import java.util.*;
class RegexTest1
{
    public static void main(String[]args)
    {
        String str="192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30";
        String regex="(\\d+)";//先将前面添加两个0,因为最低字段也是1位
        String newstr="00$1";
        str=str.replaceAll(regex,newstr);
        System.out.println(str);
        regex="0*(\\d{3})";//去除多余的0,让每个字段都为3位
        newstr="$1";
        str=str.replaceAll(regex,newstr);
        System.out.println(str);
        String[]arr=str.split(" ");//按空格切割
        TreeSet<String> ts=new TreeSet<String>();//将其放入TreeSet集合,按照自然排序进行自动排序
        for (String s:arr)
        {
            ts.add(s);
        }
        for(String s:ts)
        {
            System.out.println(s.replaceAll("0*(\\d+)","$1"));//去掉前面的0
        }
    }
}

编程:判断输入的邮箱地址是否正确。

class RegexTest2
{
    public static void main(String[]args)
    {
        String str="XXXXXXX@qq.com";
        String regex="[a-zA-Z1-9][a-zA-Z0-9_]{4,11}@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}";//第一位是字母或者1-9,后几位是字母数字或者下划线,然后是@,然后是域名,然后是.com之类的,还有可能是.com.cn所以将前面定义为组,然后最多三个。
        System.out.println(str.matches(regex));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值