案例1:
public static void classicDemo(){
String[] strArr = {"aca*b","a(ca)+b","aca+b","acb","a.b","ac{2}b","a.*b","a+b"};
for (int i = 0; i < strArr.length; i++) {
Pattern p = Pattern.compile(strArr[i]);
Matcher m = p.matcher("acccb");
boolean b = m.matches();
System.out.println(b);
}
}
运行结果:
false
false
false
false
false
false
true
false
案例2:
public static void groupDemo(){
String regex = "(x)(y\\w*)(z)";
String input = "exy123z";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
System.out.println(m.groupCount());
while (m.find()) {
//while (m.matches()) {
System.out.println(m.group()); // group()等价于group0
}
}
运行结果:
3
xy123z
案例3:
public static void groupDemo2(){
String str = "Hello,World! in Java.";
Pattern pattern = Pattern.compile("W(or)(ld!)");
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.groupCount());
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));//第二组匹配的索引
}
}
运行结果:
2
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
案例4:
public static void greedyDemo(){
String text = "";
String rule1 = "";
String rule2 = "";
for (int i = 0; i < 2; i++) {
if(i == 0) {
text="Demo:\"test1\";test2:\"test3\";";
rule1="Demo:\".+\""; //贪婪模式
rule2="Demo:\".+?\""; //非贪婪模式
}else if(i == 1) {
text="Demo:test1;test2:test3";
rule1="Demo:.+"; //贪婪模式
rule2="Demo:.+?"; //非贪婪模式
}
Pattern p1 =Pattern.compile(rule1);
Matcher m1 = p1.matcher(text);
while(m1.find()){
System.out.println("̰贪婪模式匹配结果:"+m1.group(0));
}
Pattern p2 =Pattern.compile(rule2);
Matcher m2 = p2.matcher(text);
while(m2.find()){
System.out.println("非贪婪模式匹配结果:"+m2.group(0));
}
}
}
运行结果:
̰贪婪模式匹配结果:Demo:"test1";test2:"test3"
非贪婪模式匹配结果:Demo:"test1"
̰贪婪模式匹配结果:Demo:test1;test2:test3
非贪婪模式匹配结果:Demo:t
案例5:查找“jdfPASSdjPASSfadpass,,,Fail,fail,jljlkj.fail” 中PASS、pass、Fail、fail(pass 、fail不区分大小写),并把他们放到数组result[]中,然后对数组进行遍历
public static void testcase4() {
Pattern pattern = Pattern.compile("pass|fail",Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("jdfPASSdjPASSfadpass,,,Fail,fail,jljlkj.fail");
ArrayList<String> al = new ArrayList<String>();
while(matcher.find()) {
al.add(matcher.group());
}
for (String str : al) {
System.out.print(str+"\t");
}
}
运行结果:
PASS PASS pass Fail fail fail