可以用几个条件匹配字符吗?

It is possible to match charcter with several condition?

我的剧本是

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 条件脚本的任何可能都被简化为单个正则表达式行。

您可以使用| 更改来匹配多个模式。 /(?| (first)|(second) )/x,将任何匹配的组放入 </code></p> <pre><code>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 "\n"; } } __DATA__ abcefgh abqzxgh arcefgy abqzxgM arMzfgy arVRfgy arVARgy abcefgh arcexgy

输出

abcefgh
abqzxgh
arcefgy
abqzxgM
arMzfgy
abcefgh
arcexgy