Pattern类和Matcher类都是属于java.util.regex包中的类,主要用于正则表达式的实现。
Pattern类用于创建一个正则表达式的匹配模板,创建方式如下:
Pattern p = Pattern.compile("自定义的正则表达式匹配模板");
System.out.println(p.pattern()); //输出结果:自定义的正则表达式匹配模板
Matcher类提供了对正则表达式的分组支持,创建方式如下:
Pattern p = Pattern.compile("Java");
String str = "123Java";
Matcher m = p.matcher(str); //创建以Java为模板的Matcher类对象m
Pattern与Matcher联合使用:
Pattern p = Pattern.compile("Java");
System.out.println(p.pattern()); //输出结果:Java
Pattern p1 = Pattern.compile("C++");
System.out.println(p.pattern()); //输出结果:C++
Matcher m1 = p.matcher("abc"); //创建以Java为模板的对象m1:abc
Matcher m2 = p.matcher("def"); //创建以Java为模板的对象m2:def
Matcher m3 = p1.matcher("abc"); //创建以C++为模板的对象m3:abc
System.out.println(m1.pattern()); //输出m1的模板:Java
System.out.println(m2.pattern()); //输出m2的模板:Java
System.out.println(m3.pattern()); //输出m3的模板:C++
System.out.println(m1.pattern() == m2.pattern()); //输出结果:true
System.out.println(m1.pattern() == m3.pattern()); //输出结果:false
Matcher类提供了三个返回boolean值得匹配方法:matches(),lookingAt(),find(),find(int start),其中matches()用于全字符串匹配,lookingAt()从字符串起始位置开始匹配满足的子串,find()可以对任意位置字符串匹配,其中start为起始匹配索引值。
Pattern p = Pattern.compile("Java");
Matcher m1 = p.matcher("Java");
Matcher m2 = p.matcher("Java123");
Matcher m3 = p.matcher("123Java");
boolean b1 = m1.matches();
System.out.println(b1); //输出结果:true
boolean b2 = m2.matches();
System.out.println(b2); //输出结果:false
boolean b3 = m3.matches();
System.out.println(b3); //输出结果:false
boolean b4 = m1.lookingAt();
System.out.println(b4); //输出结果:true
boolean b5 = m2.lookingAt();
System.out.println(b5); //输出结果:true
boolean b6 = m3.lookingAt();
System.out.println(b6); //输出结果:false
m1 = p.matcher("Java"); //运行到此行代码之前,m1和m2的值已发生变化
m2 = p.matcher("Java123"); //故重新赋上原值,否则b7和b8会变成false
m3 = p.matcher("123Java"); //求告知为何m1和m2的值会发生变化,十分感谢 求告知为何m1和m2的值会发生变化,十分感谢
boolean b7 = m1.find();
System.out.println(b7); //输出结果:true
boolean b8 = m2.find();
System.out.println(b8); //输出结果:true
boolean b9 = m3.find(2);
System.out.println(b9); //输出结果:true
boolean b10 = m3.find(4);
System.out.println(b10); //输出结果:false