我在很长一段时间后尝试正则表达式。我不确定问题是否出在正则表达式或逻辑上。
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
但是当运行代码时,组提取被关闭。
任何帮助将不胜感激。
谢谢!
最佳答案
您有一些问题:
- 您失踪了
|
在你的第二个角色类别中。 - 整个正则表达式周围有一个不必要的捕获组。
- 输出组时,需要使用
<= 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/