Java正则表达式有两个工具类:Pattern和Matcher。Pattern是用来编译正则表达式的匹配字符串。Matcher进行匹配。Matcher有两个比较有用的方法。matcher和find。这两个方法有一定的区别。matcher是匹配整个字符串。而find则是查到当前字符串中的匹配字串。
代码如下:
Pattern pa = Pattern.compile("http://www.meituan.com/deal/[0-9]*.html", Pattern.DOTALL);
Matcher ma1 = pa.matcher("http://www.meituan.com/deal/26174473.html\" class=\"w-link\"");
System.out.println(ma1.matches());
这个匹配是不成功的。打印值为false。如果要匹配成功,模式匹配串需要改成:
http://www.meituan.com/deal/[0-9]*.html\" class=\"w-link\"
当我们使用find匹配字串的时候可以用来截取字符串:
Pattern pa = Pattern.compile("(http://www.meituan.com/deal/([0-9]*).html)", Pattern.DOTALL);
Matcher ma1 = pa.matcher("http://www.meituan.com/deal/26174473.html\" class=\"w-link\"");
// System.out.println(ma1.matches());
while (ma1.find()) {
System.out.println(ma1.group(1));
System.out.println(ma1.group(2));
}
结果是:
http://www.meituan.com/deal/26174473.html
26174473
这里的组别是从外带内,从左到右进行排序的。
例2:
String str = "Hello,World! in Java.";
Pattern pattern = Pattern.compile("W(or)(ld!)");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println("Group 0:" + matcher.group(0));// 得到第0组——整个匹配
System.out.println("Group 1:" + matcher.group(1));// 得到第一组匹配——与(or)匹配的
System.out.println("Group 2:" + matcher.group(2));// 得到第二组匹配——与(ld!)匹配的,组也就是子表达式
System.out.println("Start 0:" + matcher.start(0) + " End 0:"
+ matcher.end(0));// 总匹配的索引
System.out.println("Start 1:" + matcher.start(1) + " End 1:"
+ matcher.end(1));// 第一组匹配的索引
System.out.println("Start 2:" + matcher.start(2) + " End 2:"
+ matcher.end(2));// 第二组匹配的索引
System.out.println(str.substring(matcher.start(0), matcher.end(1)));// 从总匹配开始索引到第1组匹配的结束索引之间子串——Wor
}
结果是:
Group 0:World!
Group 1:or
Group 2:ld!
Start 0:6 End 0:12
Start 1:7 End 1:9
Start 2:9 End 2:12
Wor