假设您有一个使用多个替代方案编译的 java.util.Pattern
,每个替代方案都有一个捕获组:
Pattern pattern = Pattern.compile("(a?bc)|(ab?c)|(abc?)");
Matcher matcher = pattern.matcher("abc");
System.out.println(matcher.matches());
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println(matcher.group(3));
你会看到:
true
abc
null
null
有没有办法让每个捕获组都匹配,或者您是否总是被限制为单个匹配组?
也就是说,由于“abc”与上面的每个替代项匹配,有什么方法可以将其作为输出:
true
abc
abc
abc
根据我对正则表达式实现的内存,我猜不会,但我想我应该检查一下。
最佳答案
使用交替,它只会填充多个组中的一组,但您可以使用前瞻来填充您想要的所有 3 个组:
(?=(a?bc))(?=(ab?c))(?=(abc?))
它将根据您的需要在所有 3 个组中填充 abc
。
RegEx Demo
Java Code Demo
更新:此外,您还需要使用 Matcher#find()
才能获得多个匹配项:
Pattern p = Pattern.compile("(?=(a?bc))(?=(ab?c))(?=(abc?))");
Matcher m = p.matcher("abc");
while (m.find()) {
System.out.printf("%s::<%s> <%s> <%s>%n", m.group(), m.group(1), m.group(2), m.group(3));
}
关于java.util.Pattern 只匹配一个替代组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25511198/