我正在将代码从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));
}
}
}
数字组从不返回。怎么了?
您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,则永远不会进入第二组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句