有 Java 编程相关的问题?

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

regex Java matcher无法找到最后一个组

过了很长一段时间,我在试regex。我不确定问题是在于正则表达式还是逻辑

String test = "project/components/content;contentLabel|contentDec";
String regex = "(([A-Za-z0-9-/]*);([A-Za-z0-9]*))";

Map<Integer, String> matchingGroups = new HashMap<>();

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(test);
//System.out.println("Input: " + test + "\n");
//System.out.println("Regex: " + regex + "\n");
//System.out.println("Matcher Count: " + matcher.groupCount() + "\n");
if (matcher != null && matcher.find()) {
    for (int i = 0; i < matcher.groupCount(); i++) {
         System.out.println(i + " ->  " + matcher.group(i) + "\n");
    }
} 

我希望上面给出的结果如下:

0 ->  project/components/content;contentLabel|contentDec
1 ->  project/components/content
2 ->  contentLabel|contentDec

但是在运行代码时,组提取是关闭的

任何帮助都将不胜感激

谢谢


共 (1) 个答案

  1. # 1 楼答案

    你有几个问题:

    1. 你在第二个角色类中缺少|
    2. 在整个正则表达式中有一个不必要的捕获组
    3. 输出组时,需要使用<= matcher.groupCount(),因为matcher.group(0)是为整个匹配保留的,所以捕获组位于group(1)group(2)

    这将起作用:

    String test = "project/components/content;contentLabel|contentDec";
    String regex = "([A-Za-z0-9-/]*);([A-Za-z0-9|]*)";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(test);
    if (matcher != null && matcher.find()) {
        for (int i = 0; i <= matcher.groupCount(); i++) {
             System.out.println(i + " ->  " + matcher.group(i) + "\n");
        }
    }