任何人都知道正则表达式中的哪个组实际上匹配作业

时间:2010-02-04 13:50:50

标签: java regex

说我有一个正常的表达方式,比如说:       {“(组1)|(组2)(组3)| ....(组n)”} 匹配输入String对象,如果匹配成功,我如何知道上述n个组中哪个组与该String对象实际匹配? 我正在使用的是java.util中的regex lib。 谢谢你们。

2 个答案:

答案 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.