RegExp适用于perl,javascript和objective-c,但不适用于java

时间:2013-09-16 06:39:09

标签: java javascript regex

我正在将代码从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));
    }
}

}

永远不会返回数字组。 有什么问题?

1 个答案:

答案 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,则永远不会进入第二组。