正则表达式匹配得太频繁

我有一个包含某些类名和方法调用的字符串。我想提取这些,但我为此编写的正则表达式返回的匹配项比预期的多。

#!/usr/bin/perl

$someInput = "Lorem ipsum  dolor sit CLASS3.aMethod.anotherMethod amet, consetetur sadipscing CLASS1.bMethod elitr, sed diam nonumy eirmod";

@matches = ($someInput =~ /((CLASS1|CLASS2|CLASS3)(\.[A-Za-z0-9_]+){1,})/g);
foreach my $match (@matches) {
    print $match . "\n";
}

除了以“ CLASS.methodOne.methodTwo ...”的形式进行匹配之外,它还分别匹配类名和方法。请看一下示例结果:

CLASS3.aMethod.anotherMethod
CLASS3
.anotherMethod
CLASS1.bMethod
CLASS1
.bMethod

我真正想要的是:

CLASS3.aMethod.anotherMethod
CLASS1.bMethod

如果有人可以帮助我,我将不胜感激。一个简短的解释也很好:)谢谢!

暴民

正则表达式

((CLASS1|CLASS2|CLASS3)(\.[A-Za-z0-9_]+){1,}))

定义3个捕获组,每个捕获组由平衡对或括号划定:

1: ((CLASS1|CLASS2|CLASS3)(\.[A-Za-z0-9_]+){1,})
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

2: ((CLASS1|CLASS2|CLASS3)(\.[A-Za-z0-9_]+){1,})
     ^^^^^^^^^^^^^^^^^^^^

3: ((CLASS1|CLASS2|CLASS3)(\.[A-Za-z0-9_]+){1,})
                           ^^^^^^^^^^^^^^^

因此,当一个表达式与此表达式成功匹配时,结果将是3个匹配项。

使用(?:...)语法可以将表达式作为正则表达式中的逻辑单元保持在一起,但可以将其指定为非捕获组。如果成功,此表达式将只返回一个匹配项:

((?:CLASS1|CLASS2|CLASS3)(?:\.[A-Za-z0-9_]+){1,})

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章