RegExp可在Perl,JavaScript和Objective-C中使用,但不适用于Java

达菲

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

}

数字组从不返回。怎么了?

Pietzcker团队

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过引用传递可在C中使用,但不适用于此代码的C ++

MySQL查询可在MySQL中使用,但不适用于Java

SQL Query可在SQL Developer中使用,但不适用于Java端

Javascript可在JS Fiddle中使用,但不适用于Chrome / IE

SQL Server查询可在Management Studio中使用,但不适用于C#(ServiceStack.OrmLite)

编码新功能,可在代码块中使用,但不适用于vscode

Python多重处理可在Linux中使用,但不适用于Windows

阵列比较可在Chrome中使用,但不适用于Chrome IPAD

删除Ajax可在localhost中使用-但不适用于生产托管

RegEx替换可在Ruby gsub中使用,但不适用于sed

$(this)选择器可在jsfiddle中使用,但不适用于我的脚本

SQL查询可在phpMyAdmin中使用,但不适用于php页面

Alexa函数可在AWS lamda中使用,但不适用于Service Simulator

MySQL INSERT查询可在Phpmyadmin中使用,但不适用于PHP

可在jsfiddle中使用,但不适用于html页面

前置/追加可在Chrome和Firefox中使用,但不适用于IE11和Edge

C字符串作为模板非类型参数可在gcc 6.3中使用,但不适用于Visual Studio 2017(x64为19.16.27027.1)

适用于几何体入口点的SceneKit着色器修改器可在iOS中使用,但不适用于OS X

scrapy-splash有效内容选择器可在Shell中使用,但不适用于Spider

scrapy-splash有效内容选择器可在Shell中使用,但不适用于Spider

带选项卡的活动可在调试中使用,但不适用于发行版

Lambda函数可在AWS控制台中使用,但不适用于Cloud9

Newtonsoft JSON反序列化可在本地和实时环境中使用,但不适用于ASP.NET MVC应用程序的测试

CSS不适用于IE和Firefox,但可在Chrome中使用

Jsoup HTML解析可在Java上运行,但不适用于android studio

使用Qt进行多处理可在Windows中运行,但不适用于Linux

动画屏幕可在手机上使用,但不适用于平板电脑

MKAnnotation setImage可在iPhone上使用,但不适用于iPad / iPhone 6+

JSFiddle示例可在Web上使用,但不适用于我的PC