我有一個正則表達式來匹配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