Regex “模式匹配发出警告”;零长度表达式上的量词“意外”;
我已经编写了一个正则表达式,用于检查俱乐部成员编号,其有效值如下 1)Regex “模式匹配发出警告”;零长度表达式上的量词“意外”;,regex,perl,Regex,Perl,我已经编写了一个正则表达式,用于检查俱乐部成员编号,其有效值如下 1) pl XXXX2)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
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."
这似乎是错误报告中的一个错误:它指向了错误的地方,即正则表达式的末尾。它只是对正则表达式开头的反应:
/^{2}...
它是一个^
(零长度表达式),后跟一个量词({2}
)。如下所示:
$ perl -lwe '/^{2}/'
Quantifier unexpected on zero-length expression in regex; marked by <-- HERE in
m/^{2} <-- HERE / at -e line 1.
或者,您可以将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
这似乎是错误报告中的一个错误:它指向了错误的位置,即正则表达式的结尾。它只是对正则表达式开头的反应:
/^{2}...
它是一个^
(零长度表达式),后跟一个量词({2}
)。如下所示:
$ perl -lwe '/^{2}/'
Quantifier unexpected on zero-length expression in regex; marked by <-- HERE in
m/^{2} <-- HERE / at -e line 1.
或者,您可以将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
我相信您需要这个正则表达式:
/^(?:pl|gl)[-]+[1-9][0-9]+$/
我相信你需要这个正则表达式:
/^(?:pl|gl)[-]+[1-9][0-9]+$/
也许你的意思是
[1-9][0-9]+
。和-
而不是[-]+
。也许你的意思是[1-9][0-9]+
。和-
而不是[-]+
。同样地,[-]{1}+
也是错误的。这是一行中的两个量词:无用的{1}
(正好一次),然后+
(一次或多次)。@amon Yes。而且[pl,gl]+
也不是很正确。我只关注了错误本身。gl-12345也正在得到验证(因为这并不是将XXXX限制为四位数字),我想验证它,直到只有四位数字,并且gl-12345在这种情况下不应有效。您必须使用线端锚,或者用某种方式表示它不可能是5。我假设你知道$
,因为你自己用过它。同样地,[-]{1}+
也是错误的。这是一行中的两个量词:无用的{1}
(正好一次),然后+
(一次或多次)。@amon Yes。而且[pl,gl]+
也不是很正确。我只关注了错误本身。gl-12345也正在得到验证(因为这并不是将XXXX限制为四位数字),我想验证它,直到只有四位数字,并且gl-12345在这种情况下不应有效。您必须使用线端锚,或者用某种方式表示它不可能是5。我假设你知道$
,因为你自己用过它。这{1}+
是关于什么的?这{1}+
是关于什么的?