我的脚本是
foreach (<DATA>){
if( m/a[br\w][cq][ez][fx]g[hy]/g)
{
print "$&\n";
}
elsif( m/a[br][cq\w][ez][fx]g[hy]/g)
{
print "$&\n";
}
elsif( m/a[br][cq][ez\w][fx]g[hy]/g){
print "$&\n";
}
elsif( m/a[br][cq][ez][fx\w]g[hy]/g){
print "$&\n";
}
elsif( m/a[br][cq][ez][fx]g[hy\w]/g){
print "$&\n";
}
}
__DATA__
abcefgh
abqzxgh
arcefgy
abqzxgM
arMzfgy
arVRfgy
arVARgy
abcefgh
arcexgy
我的脚本给出了我期望的脚本输出
abcefgh
abqzxgh
arcefgy
abqzxgM
arMzfgy
abcefgh
arcexgy
任何可能的if-else条件脚本都会短路到单个正则表达式行。
答案 0 :(得分:4)
您可以使用|
更改来匹配多个模式。
/(?| (first)|(second) )/x
,将任何匹配的群组放入$1
use strict;
use warnings;
my $re = qr{
(?|
(a[br\w][cq][ez][fx]g[hy]) |
(a[br][cq\w][ez][fx]g[hy]) |
(a[br][cq][ez\w][fx]g[hy]) |
(a[br][cq][ez][fx\w]g[hy]) |
(a[br][cq][ez][fx]g[hy\w])
)
}x;
while (<DATA>) {
if (/$re/) { print "$1\n"; }
}
__DATA__
abcefgh
abqzxgh
arcefgy
abqzxgM
arMzfgy
arVRfgy
arVARgy
abcefgh
arcexgy
输出
abcefgh
abqzxgh
arcefgy
abqzxgM
arMzfgy
abcefgh
arcexgy