Java 匹配器无法找到最后一组

标签 java 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. 您失踪了|在你的第二个角色类别中。
  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");
    }
} 

关于Java 匹配器无法找到最后一组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60878999/

相关文章:

java - 使用 selenium 时如何在 java 中的 Firefox Web 驱动程序上设置页面加载超时?

java - 我不知道为什么 junit 会出现此错误

java - cucumber AmbiguousStepDefinitionsException Java

JavaScript:string.match 正则表达式帮助

javascript - 正则表达式检查 URL 是否为主页 URL

python - 在 Python 中删除字符串中的最后一个斜杠和数字

Java:BufferedReader 和 OutputStream

java - 尽管使用 @Transactional(propagation=Propagation.REQUIRES_NEW) 但出现 LazyInitializationException

php - preg_match 包括正斜杠

java - ArrayList 还是 LinkedList 更适合排序?