我正在将代码从Javascript转换为Java,我发现Java中的正则表达式无法按预期工作(使用标准类Pattern)。
它在perl,js以及使用NSRegularExpression的Cocoa中工作正常
reg exp为([a-z]*) ([0-9]*)
,java代码如下所示
它必须匹配由空格分隔的两个组,第一组仅包含字母,第二组仅包含数字
public static void main(String[] args) {
Matcher matcher = Pattern.compile("([a-z]*) ([0-9]*)").matcher("hello 101");
while (matcher.find()) {
for (int i = 0; i < matcher.groupCount(); i++) {
System.out.println(i + ": " + matcher.group(i));
}
}
}
永远不会返回数字组。 有什么问题?
答案 0 :(得分:4)
您过早结束for
循环:
for (int i = 0; i <= matcher.groupCount(); i++) {
// ^^
System.out.println(i + ": " + matcher.group(i));
}
有两个捕获组,.groupCount()
为2:
.group(0)
是整场比赛.group(1)
包含第一个捕获组.group(2)
包含第二个捕获组匹配的文本如果您将i
停在1,则永远不会进入第二组。