0

pl-XXXX1) 2) 1000-9999gl-XXXXの有効な値を持つクラブ会員番号をチェックするための正規表現を作成しました。XXXX

私の正規表現は正常に機能していますが、以下の警告が表示される理由を理解できません -

"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 に答える