有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java任何人都知道正则表达式中的哪个组实际执行匹配任务

假设我有一个正则表达式,比如fowlowing: {(第一组)|(第二组)(第三组)|……(第n组)} 要匹配一个输入字符串对象,如果它匹配成功,我如何知道上面n个组中的哪个组实际上匹配这个字符串对象? 我使用的是java中的正则表达式库。util。 谢谢你们


共 (2) 个答案

  1. # 1 楼答案

    这里有一个方法:

    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
    
  2. # 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.