捕获分组
代码演示:
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)); } }}