我有一个正则表达式来匹配x = y形式的字符串。即名称分配了一个值。该值可以选择性地引用和两个名称和值符合\ w +正则表达式和分组
我的正则表达式是
\w+=\w+|"\w+"|'\w+'
可以有多个在同一行这些任务的,但在这里,我遇到了问题。由于某种原因,当我把这个正则表达式放在(?:)中时,它将不匹配。见测试用例下面
use Test::More;
my $re1 = qr/^\w+=\w+|"\w+"|'\w+'$/p;
my $re2 = qr/^(?:\w+=\w+|"\w+"|'\w+')$/p;
ok('xy="abc"' =~ $re1);
say "PREMATCH ${^PREMATCH}";
say "MATCH ${^MATCH}";
say "POSTMATCH ${^POSTMATCH}";
ok('xy="abc"' =~ $re2);
done_testing;
输出是
ok 1
PREMATCH xy=
MATCH "abc"
POSTMATCH
not ok 2
# Failed test at ./test.pl line 20.
1..2
# Looks like you failed 1 test of 2.
我不明白为什么第一场比赛和第二个不行。而且我也不明白为什么第一个匹配等号后的部分。
你们是不是要同时匹配'xy'和'“ABC”'? – Degustaf 2014-11-14 19:08:26