说我有一个正常的表达方式,比如说: {“(组1)|(组2)(组3)| ....(组n)”} 匹配输入String对象,如果匹配成功,我如何知道上述n个组中哪个组与该String对象实际匹配? 我正在使用的是java.util中的regex lib。 谢谢你们。
答案 0 :(得分:3)
这是一种方式:
import java.util.regex.*;
public class Test {
public static void main(String[] args) {
String text = "12 ab ^&";
String regex = "(\\d+)|([a-z]+)|(\\p{Punct}+)";
Matcher m = Pattern.compile(regex).matcher(text);
while(m.find()) {
System.out.println("\nmatched text: "+m.group());
for(int i = 1; i <= m.groupCount(); i++) {
System.out.println(" group "+i+"? "+(m.group(i) != null));
}
}
}
}
输出:
matched text: 12
group 1? true
group 2? false
group 3? false
matched text: ab
group 1? false
group 2? true
group 3? false
matched text: ^&
group 1? false
group 2? false
group 3? true
答案 1 :(得分:2)
您可以使用Matcher对象上的方法查看匹配的组。这是一个例子:
import java.util.regex.*;
class RegexExample
{
public static void main(String[] args) {
String input = "foo baz bar foo";
String regex = "(foo)|(bar)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
for (int i = 1; i <= matcher.groupCount(); ++i) {
if (matcher.group(i) != null)
{
System.out.println("Group " + i + " matched.");
}
}
}
}
}
输出:
Group 1 matched.
Group 2 matched.
Group 1 matched.