捕获分组
代码演示:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String a = "wty1234abcwty 12wty pi5678";
//下面是非命名分组
//说明:
// 1. matcher.group(0)得到匹配的字符串
// 2. matcher.group(1)得到匹配的字符串第一个分组的内容
// 3. matcher.group(2)得到匹配的字符串第二个分组的内容
// String str = "(\\d\\d)(\\d)(\\d)";//匹配四个数字的字符串
//命名分组:即可以给分组取名
String str = "(?<g1>\\d\\d)(?<g2>\\d\\d)";//匹配四个数字的字符串
Pattern pattern = Pattern.compile(str);
Matcher matcher = pattern.matcher(a);
while(matcher.find()){
System.out.println("找到:" + matcher.group(0));
System.out.println("第一个分组的内容:" + matcher.group(1));
System.out.println("第一个分组的内容[通过组名获取]:" + matcher.group("g1"));
System.out.println("第二个分组的内容:" + matcher.group(2));
System.out.println("第二个分组的内容[通过组名获取]:" + matcher.group("g2"));
}
}
}
特别分组
代码演示:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String a = "hellowty同学 nbwty哥哥 wty老大nb";
//找到 wty同学 wty哥哥 wty老大 子字符串
// String str = "wty同学|wty哥哥|wty老大";
//改为费捕获分组,不能有matcher.group(1)操作
// String str = "wty(?:同学|哥哥|老大)";
//找到wty关键字,但是要求是查找wty同学 wty哥哥中包含的wty
// String str = "wty(?=同学|哥哥)";
//找到wty关键字,但是要求是查找不是 wty同学 wty哥哥中包含的wty
String str = "wty(?!同学|哥哥)";
Pattern pattern = Pattern.compile(str);
Matcher matcher = pattern.matcher(a);
while(matcher.find()){
System.out.println("找到:" + matcher.group(0));
}
}
}
贪婪匹配与非贪婪匹配
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String a = "hello11111 wty同学";
// String str = "\\d+";//默认是贪婪匹配
String str = "\\d+?";//非贪婪匹配
Pattern pattern = Pattern.compile(str);
Matcher matcher = pattern.matcher(a);
while(matcher.find()){
System.out.println("找到:" + matcher.group(0));
}
}
}