【发布时间】:2017-02-07 14:20:33
【问题描述】:
我有一个动态构建的较大的正则表达式,例如缩短的文本示例
my $regex = qr/(daisy|john|fred|june)/is;
my $test = 'Later John said blah and JOHN said ignore john .....';
while( $test =~ /($regex)/g ) {
warn $1;
}
# Shows all 3 matches
我希望正则表达式匹配每次出现的“John”或“JOHN”等,但如果第一个字母是小写字母则不匹配,例如“john”不应该匹配。
我可以在构建时重复正则表达式,比如
/(Daisy|DAISY|John|JOHN|Fred|FRED....)/
但是有没有一些有趣的方法不需要这样做,并且正则表达式仅在第一个字母是大写字母时才匹配?
我可以在不区分大小写的匹配之后在正则表达式之外运行第二次检查作为可能的解决方案,如果匹配则忽略它!~ /[A-Z]/ 或其他东西,但我很想知道是否有在同一个正则表达式中添加额外条件的方式?
【问题讨论】:
-
虽然通常有,但我会坚持在
perl中编写您的代码,而不是尝试在regex中编写它。后者相当强大,但它的可读性确实不是那么好。 -
老实说,我是一个正则表达式的人,我认为你最后提出的解决方案是最好的方法。 (第二次检查外部正则表达式)
-
如果它是最直观的,我可能会去谢谢,我只是不确定是否有一些我不知道的“简单”方法。