我已经写了一个正则表达式来检查俱乐部会员号,其有效值为
1)pl-XXXX
2)gl-XXXX
其中XXXX
为1000-9999。
我的正则表达式工作正常,但我无法理解为什么会显示以下警告 -
"Quantifier unexpected on zero-length expression in regex; marked by <-- HERE in
m/^{2}[pl,gl]+[-]{1}+[1-9]{1}+[0-9]$ <-- HERE / at test.pl line 62."
我的代码:
if ($count == 3){ ## check club identifier ##
if ($_ =~ /^{2}[pl,gl]+[-]{1}+[1-9]{1}+[0-9]$/){
say "Line4 Good: ", $currLine;
} else {
say "Error in Line 4: Not a club member ";
}
答案 0 :(得分:5)
这似乎是错误报告中的错误:它指向错误的地方,正则表达式的结束。它只是对正则表达式的开头作出反应:
/^{2}...
这是^
(零长度表达式),后跟量词({2}
)。正如这里所示:
$ perl -lwe '/^{2}/'
Quantifier unexpected on zero-length expression in regex; marked by <-- HERE in
m/^{2} <-- HERE / at -e line 1.
如果你想匹配“1)pl-XXXX 2)gl-XXXX,其中XXXX是1000-9999。”你可能想要像
这样的东西/^[pg]l-\d{4}/
或者,您可以将0
排除在有效的第一个数字之外,但我发现这有点过分:
/^[pg]l-[1-9]\d{3}/
为避免部分匹配,您可以使用行锚点结束:
/^[pg]l-[1-9]\d{3}$/
或某种方式表示以下字符不是数字
/^[pg]l-[1-9]\d{3}(?!\d)/
后者在较长的字符串中很有用,例如foo=pl-1000,gl-2012
。
答案 1 :(得分:1)
我相信你需要这个正则表达式:
/^(?:pl|gl)[-]+[1-9][0-9]+$/