// pattern() 返回正则表达式的字符串形式,
// 其实就是返回Pattern.complile(String regex)的regex参数
Pattern p=Pattern.compile("\\w");
p.pattern(); // 返回 \w+
System.out.println(p.pattern());
-
Pattern.split(CharSequence input)
// 分隔字符串,并返回一个String[] Pattern pat = Pattern.compile("\\d+"); String[] str = pat.split("我的QQ是:456456我的电话是:0532214我的邮箱是:aaa@aaa.com"); System.out.println(str[0]); // 输出结果为 我的QQ是: System.out.println(str[1]); // 输出结果为 我的电话是: System.out.println(str[2]); // 输出结果为 我的邮箱是:aaa@aaa.com
-
Pattern.matches(String regex,CharSequence input)
// 快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串. Pattern.matches("\\d+", "2223"); // 返回true Pattern.matches("\\d+", "2223aa"); // 返回false,需要匹配到所有字符串才能返回true,这里aa不能匹配到 Pattern.matches("\\d+", "22bb234"); // 返回false,需要匹配到所有字符串才能返回true,这里bb不能匹配到 System.out.println(Pattern.matches("\\d+", "2223")); System.out.println(Pattern.matches("\\d+", "2223aa")); System.out.println(Pattern.matches("\\d+", "22bb234"));
-
Pattern.matcher(CharSequence input)
// Pattern类只能做一些简单的匹配操作,要想得到更强更便捷的正则匹配操作,那就需要将Pattern与Matcher一起合作. // Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持. Pattern pattern=Pattern.compile("\\d+"); Matcher m=pattern.matcher("22bbc44"); System.out.println(m.pattern()); // 返回p 也就是返回该Matcher对象是由哪个Pattern对象的创建的
-
Matcher.matches()/ Matcher.lookingAt()/ Matcher.find()
// matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true// 4.1 matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true Pattern patt = Pattern.compile("\\d+"); Matcher matcher = patt.matcher("234b23"); System.out.println(matcher.matches()); // 返回false,因为bb不能被\d+匹配,导致整个字符串匹配未成功. Matcher matcher2 = patt.matcher("2345"); System.out.println(matcher2.matches()); // 返回true,因为\d+匹配到了整个字符串 // 4.2 lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true Pattern p = Pattern.compile("\\d+"); Matcher m = p.matcher("22mm34"); System.out.println(m.lookingAt()); // 返回true,因为\d+匹配到了前面的234 Matcher m2 = p.matcher("aa2345"); System.out.println(m2.lookingAt()); // 返回false,因为\d+不能匹配前面的aa // 4.3 find()对字符串进行匹配,匹配到的字符串可以在任何位置. Pattern p = Pattern.compile("\\d+"); Matcher m = p.matcher("234nn23"); System.out.println(m.find()); // 返回true Matcher m2 = p.matcher("mm4567"); System.out.println(m2.find()); // 返回true Matcher m3 = p.matcher("aa2345gg"); System.out.println(m3.find()); // 返回true Matcher m4 = p.matcher("abcd"); System.out.println(m4.find()); // 返回false
5…Mathcer.start()/ Matcher.end()/ Matcher.group()
// 用matches(),lookingAt(),find()执行匹配操作后,就可以利用以上三个方法得到更详细的信息.
// start()返回匹配到的子字符串在字符串中的索引位置.
// end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置.
// group()返回匹配到的子字符串
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("sdf123we");
System.out.println(m.find()); // 匹配123
System.out.println(m.start()); // 返回1的索引号
System.out.println(m.end()); // 返回6,返回的是123后的索引号
System.out.println(m.group()); // 返回123
System.out.println("--------------");
Matcher m2 = p.matcher("12345dfg");
System.out.println(m2.lookingAt()); // 匹配12345
System.out.println(m2.start()); // 返回1的索引号
System.out.println(m2.end()); // 返回5,返回的是12345后的索引号
System.out.println(m2.group()); // 返回12345
System.out.println("--------------");
Matcher m3 = p.matcher("12345"); // 如果Matcher m3=p.matcher("2223bb"); 那么下面的方法出错,因为不匹配返回false
System.out.println(m3.lookingAt()); // 匹配12345
System.out.println(m3.start()); // 返回1的索引号
System.out.println(m3.end()); // 返回5,返回的是12345后的索引号
System.out.println(m3.group()); // 返回12345
总结:
// start(),end(),group()均有一个重载方法它们是start(int i),end(int i),group(int i)专用于分组操作,Mathcer类还有一个groupCount()用于返回有多少组.
Pattern p = Pattern.compile("([a-z]+)(\\d+)");
Matcher m=p.matcher("aaa2223bb");
System.out.println(m.find()); //匹配aaa2223
System.out.println(m.groupCount()); //返回2,因为有2组
System.out.println(m.start(1)); //返回0 返回第一组匹配到的子字符串在字符串中的索引号
System.out.println(m.start(2)); //返回3
System.out.println(m.end(1)); //返回3 返回第一组匹配到的子字符串的最后一个字符在字符串中的索引位置.
System.out.println(m.end(2)); //返回7
System.out.println(m.group(1)); //返回aaa,返回第一组匹配到的子字符串
System.out.println(m.group(2)); //返回2223,返回第二组匹配到的子字符串
// 例如有一段文本,里面有很多数字,而且这些数字是分开的,我们现在要将文本中所有数字都取出来,利用java的正则操作是那么的简单.
Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("我的QQ是:456456 我的电话是:0532214 我的邮箱是:aaa123@aaa.com");
while(m.find()) {
System.out.println(m.group());
}
输出:
456456
0532214
123
将以上while()循环替换成
while(m.find()) {
System.out.println(m.group());
System.out.print("start:"+m.start());
System.out.println(" end:"+m.end());
}
则输出:
456456
start:6 end:12
0532214
start:19 end:26
123
start:36 end:39