【问题标题】:Matching Multiple Groups in a Java-Regex在 Java 正则表达式中匹配多个组
【发布时间】:2016-07-06 18:53:30
【问题描述】:

是否可以在正则表达式中找到匹配字符串特定部分的所有组?

    Pattern pattern = Pattern.compile("(green trousers)|(green\\s+t)");
    Matcher matcher = pattern.matcher("my beautiful green trousers are red!");
    while (matcher.find()) {
        for (int i = 1; i <= matcher.groupCount(); i++) {
            if (matcher.group(i) != null) {
                System.out.println("group " + i + " matched");
            }
        }
    }

这个例子只返回第一组作为匹配,但我也对第二组也匹配这一事实感兴趣。

【问题讨论】:

  • 不,这不是正则表达式的工作方式。您必须检查 2 种不同的模式,看看它们是否都匹配。

标签: java regex


【解决方案1】:

没有直接的方法可以做到这一点,正则表达式将从左到右使用字符串,直到找到匹配项。

使用| 意味着它将首先检查第一个替代方案,如果不匹配它会回溯并尝试第二个替代方案。在这种情况下,(green trousers) 匹配,因此搜索停止并返回匹配。

【讨论】:

    【解决方案2】:

    没有办法检查单个正则表达式中的所有情况,但是,有一些结构允许您检查是否有多个子模式与特定子字符串匹配,这些就是所谓的“零宽度断言”(参见 @ 987654321@,在 »特殊构造«)

    例子:

    "(?=[ab]{5})[bc]{5}"
    

    只会匹配bbbbb

    【讨论】:

      猜你喜欢
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多