正则表达式捕获组匹配查找

时间:2013-10-03 12:34:37

标签: java regex lexer java-6

我有一个带有多个析取捕获组的正则表达式

(a)|(b)|(c)|...

是否有比此更快的方式来访问第一个成功匹配的捕获组的索引?

(matcher是java.util.regex.Matcher的一个实例)

int getCaptureGroup(Matcher matcher){
    for(int i = 1; i <= matcher.groupCount(); ++i){
        if(matcher.group(i) != null){
            return i;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

这取决于你的意思更快。您可以使用start(int)代替group(int)

来提高代码效率
if(matcher.start(i) != -1){

如果您不需要该组的实际内容,那么尝试创建一个新的字符串对象来保存它是没有意义的。我怀疑你会注意到性能上的任何差异,但没有理由这样做。

但你仍然需要编写相同数量的样板代码;没有办法解决这个问题。与大多数其他语言相比,Java的正则表达风格严重缺乏语法糖。

答案 1 :(得分:-1)

我猜模式是这样的:

if (matcher.find()) {
  String wholeMatch = matcher.group(0);
  String firstCaptureGroup = matcher.group(1);
  String secondCaptureGroup = matcher.group(2);
  //etc....
}

可能有不止一场比赛。所以你可以使用while循环来完成所有比赛。

请查看java.util.regex.Pattern的javadoc中的“组号”部分。