我想匹配两个不同的字符串,输出应该是1美元和2美元.根据我在这个例子中,如果$ 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";
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
perl test_reg.pl
Pattern= abc xy
Match: $1>abc xy< $2>xy< $3><
Pattern= xy abc
Match: $1>xy abc< $2>< $3>abc<
Run Code Online (Sandbox Code Playgroud)
因为只能定义capture$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;
}
}
Run Code Online (Sandbox Code Playgroud)
这给出了输出
Pattern= abc xy
Match: whole>abc xy< part>xy<
Pattern= xy abc
Match: whole>xy abc< part>abc<
Run Code Online (Sandbox Code Playgroud)