0

我编写了一个正则表达式来检查俱乐部会员编号,其有效值为 1) pl-XXXX2)gl-XXXX其中XXXX1000-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 ";
    }
4

2 回答 2

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.

于 2013-10-22T20:40:20.843 回答
1

我相信你需要这个正则表达式:

/^(?:pl|gl)[-]+[1-9][0-9]+$/
于 2013-10-22T20:40:56.460 回答