Java正则表达式不一致组

标签 java regex string regex-group

请参阅以下有关 SO 的问题:

Java: Regex not matching

我的正则表达式组不一致。我的代码如下所示:

public class RegexTest {

    public static void main(String[] args) {

        // final String VALUES_REGEX = "^\\{([0-9a-zA-Z\\-\\_\\.]+)(?:,\\s*([0-9a-zA-Z\\-\\_\\.]*))*\\}$";
        final String VALUES_REGEX = "\\{([\\w.-]+)(?:, *([\\w.-]+))*\\}";

        final Pattern REGEX_PATTERN = Pattern.compile(VALUES_REGEX);
        final String values = "{df1_apx.fhh.irtrs.d.rrr, ffd1-afp.farr.d.rrr.asgd, ffd2-afp.farr.d.rrr.asgd}";
        final Matcher matcher = REGEX_PATTERN.matcher(values);
        if (null != values && matcher.matches()) {
            // for (int index=1; index<=matcher.groupCount(); ++index) {
            // System.out.println(matcher.group(index));
            // }

            while (matcher.find()) {
                System.out.println(matcher.group());
            }
        }

    }
}

我尝试了以下组合:

A) 正则表达式为 "^\{([0-9a-zA-Z\-\_\.]+)(?:,\s*([0-9a-zA-Z\-\_\.]))\}$"并使用 groupCount() 进行迭代。结果:

df1_apx.fhh.irtrs.d.rrr

ffd2-afp.farr.d.rrr.asgd

B) 正则表达式为 ^\{([0-9a-zA-Z\-\_\.]+)(?:,\s*([0-9a-zA-Z\-\_\. ]))\}$"并使用 matcher.find()。结果:无结果。

C) 正则表达式为“\{([\w.-]+)(?:, ([\w.-]+))\}”并使用 groupCount() 进行迭代。结果:

df1_apx.fhh.irtrs.d.rrr

ffd2-afp.farr.d.rrr.asgd

D) 正则表达式为“\{([\w.-]+)(?:, ([\w.-]+))\}”并使用 matcher.find() 。结果:没有结果。

我从来没有得到一致的群体。这里的预期结果是:

df1_apx.fhh.irtrs.d.rrr

ffd1-afp.farr.d.rrr.asgd

ffd2-afp.farr.d.rrr.asgd

请告诉我,我怎样才能实现它。

最佳答案

(?<=[{,])\s*(.*?)(?=,|})

您可以简单地使用它并抓取捕获。请参阅演示。

https://regex101.com/r/sJ9gM7/33

当您有 (#something)* 时,正则表达式引擎只会记住最后一个组。您不会以这种方式获得所有组。

关于Java正则表达式不一致组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29374226/

相关文章:

java - 从顶部找到 3 个数字,考虑比相同的值

java - 如何在 Java 的可运行类中保持对象参数不变?

java - 无法将附件添加到新 RT 票证中

java - 正则表达式根据确切的字符拆分,除非在它之前用反斜杠转义

android - 如何调用javascript函数并从android java代码传递一些值?

java - 使用开始和结束空白位置从字符串中获取子字符串

java - Spring MVC Apache 服务器集成

javascript - 正则表达式在嵌入 CSHTML 页面时有效,但在移动到外部 JS 文件时无效

php - 如何使用 preg_match 进行匹配

string - Bash:如何在一行中应用两个字符串操作?