我有一个包含某些类名和方法调用的字符串。我想提取这些,但我为此编写的正则表达式返回的匹配项比预期的多。
#!/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] 删除。
我来说两句