Java中正则表达式匹配的用处在Map-reduce的书写方法中十分灵活,map方法经常需要用到正则匹配,简单用法可见以下示例:
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Test {
public static void main(String[] args) throws ClassNotFoundException {
String testText1 = "This is a regular test";
String testText2 = "regular";
//1. 第一种,适合一次性编译的方式,每次都需要编译,效率较低。
System.out.println(Pattern.matches("re.*lar", testText2));
//2. 第二种,先编译的方式
Pattern p1 = Pattern.compile("REGULAR", Pattern.CASE_INSENSITIVE);
Pattern p2 = Pattern.compile("T.*t");
Matcher m1 = p1.matcher(testText1);
Matcher m2 = p2.matcher(testText1);
//matches方法是对整个字符中的匹配
if(m1.matches()){
System.out.println("matches the string.");
} else {
System.out.println("cannot match the string.");
}
if(m2.matches()){
System.out.println("matches the string.");
} else {
System.out.println("cannot match the string.");
}
//find方法是对子字符中的匹配
if (m1.find()) {
System.out.println("finds the word.");
} else {
System.out.println("cannot find the word.");
}
}
}
另外,可以用group管理匹配的分组,示例如下:
定义:
Pattern p1 = Pattern.compile("(r.*r) (t.*t)",CASE_INSENSITIVE | Pattern.DOTALL); //可以同时定义两个用|隔开。
Matcher m = p1.matcher(testText1);
此时m1.groupCount()返回为2个组,即(r.*r) 和(t.*t),可以通过m.group(1)和m.group(2)返回两个不同的匹配组的值。