可以用几个条件匹配字符吗?
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
我的剧本是
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