我想匹配两个不同的字符串,输出应该是$1和$2,
根据我在这个例子中,如果$a是’xy abc’,那么$1应该是’xy abc’而$2应该是’abc’,但’abc’部分是3美元.
你能帮我写一个正则表达式,因为1美元应该有整个字符串,2美元应该
有第二部分.
我使用的是perl 5.8.5.
根据我在这个例子中,如果$a是’xy abc’,那么$1应该是’xy abc’而$2应该是’abc’,但’abc’部分是3美元.
你能帮我写一个正则表达式,因为1美元应该有整个字符串,2美元应该
有第二部分.
我使用的是perl 5.8.5.
my @data=('abc xy','xy abc'); foreach my $a ( @data) { print "\nPattern= $a\n"; if($a=~/(abc (xy)|xy (abc))/) { print "\nMatch: \$1>$1< \$2>$2< \$3>$3<\n"; } }
输出:
perl test_reg.pl Pattern= abc xy Match: $1>abc xy< $2>xy< $3>< Pattern= xy abc Match: $1>xy abc< $2>< $3>abc<
解决方法
因为只能定义一个捕获$2和$3,所以你可以写
foreach my $item ( @data) { print "\nPattern= $item\n"; if ($item=~/(abc (xy)|xy (abc))/) { printf "Match: whole>%s< part>%s<\n",$1,$2 || $3; } }
它给出了输出
Pattern= abc xy Match: whole>abc xy< part>xy< Pattern= xy abc Match: whole>xy abc< part>abc<