正则表达式

正则表达式

Java.util.regex是正则表达式所定制的模式进行匹配的工作的类库包。它包括两个类:Pattern类和Matcher类。Pattern是正则表达式经变异后的表现模式,Matcher对象是一个状态机器,它依据Pattern对象作为匹配模式对字符串展开匹配检查。

1.捕获组的概念

捕获组可以通过从左到右计算其开括号来编号,编号是从1 开始的。例如,在表达式 ((A)(B©))中,存在四个这样的组:

((A)(B©))

(A)

(B©)

©

2.Pattern类和Matcher类

1.compile函数

Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式,

        Pattern pattern= Pattern.compile("\\w+");
        //匹配规则
        String pattern1 = pattern.pattern();
        System.out.println(pattern1);

/*运行结果:
\w+
*/

2.split函数

 Pattern pattern= Pattern.compile("\\d+");
        String[] split = pattern.split("我的QQ是:456456我的电话是:0532214我的邮箱是:[email protected]");
        for (String str : split) {
            System.out.println(str);
        }
/*运行结果:
我的QQ是:
我的电话是:
我的邮箱是:[email protected]
*/

下面开始使用Matcher类

3.matches函数

matches是一个静态函数

boolean flag1 = Pattern.matches("\\d+", "12345");
boolean flag2 = Pattern.matches("\\d+", "12345a");
System.out.println(flag1);
System.out.println(flag2);

/*运行结果:
我的QQ是:
我的电话是:
我的邮箱是:[email protected]
*/

4.mathcher函数

Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher()函数得到实例

        Pattern pattern= Pattern.compile("\\d+");
        Matcher matcher=pattern.matcher("22bb23");
        Pattern pattern1 = matcher.pattern();//返回值pattern,返回创建Matcher对象的pattern对象

5.matches()函数、lookingAt()函数、find()函数

		Pattern pattern=Pattern.compile("\\d+");
        Matcher matcher=pattern.matcher("22bb23");
        Matcher matcher1=pattern.matcher("aa2233");
        Matcher matcher2=pattern.matcher("aabb");


        //matches()函数:对整个字符串匹配,只有整个字符串匹配,返回true
        boolean flag1=matcher.matches();//返回false
        boolean flag2=matcher1.matches();//返回true

        //find()函数:对整个字符串匹配,匹配的字符串可以在任何位置,返回true
        boolean flag3=matcher.find();//返回true
        boolean flag4=matcher1.find();//返回true
        boolean flag5=matcher2.find();//返回false

        //lookingAt()函数:对整个字符串匹配,只有匹配的字符串在最前面,返回true
        boolean flag6=matcher.lookingAt();//返回true
        boolean flag7=matcher1.lookingAt();//返回false

6.start()函数、end()函数、group()函数

        Pattern pattern=Pattern.compile("([a-z]+)(\\d+)");
        Matcher matcher=pattern.matcher("aa2233bb");

		int conut=matcher.groupCount();//返回值为2,2组一个括号为1个组
		int start = matcher.start(1);//返回值为0
        int end = matcher.end(1);//返回值为2
        String group = matcher.group(1);//返回值为aa

7.注意事项

每次执行匹配后start(),end(),group()三个方法的值都会改变,改变成匹配到的子字符串信息,以及他们的重载信息。

只有匹配成功的时候,才能使用group(),start(),end()三个方法,否则抛出Java.lang.illegalState/Exception

        Pattern pattern=Pattern.compile("\\d+");
        Matcher matcher=pattern.matcher("我的QQ是:456456 我的电话是:0532214 我的邮箱是:[email protected]");

        while (matcher.find()){
            System.out.println("str:"+matcher.group());
            System.out.println("start:"+matcher.start());
            System.out.println("end:"+matcher.end());
        }
        
/*运行结果:
str:456456
start:6
end:12
str:0532214
start:19
end:26
str:123
start:36
end:39
*/

3.常用的正则表达式

匹配中文

        Pattern pattern=Pattern.compile("[\u4e00-\u9fa5]+");
        Matcher matcher=pattern.matcher("你好");

你可能感兴趣的:(Java)