0

正規表現

[a-z0-9]{1,10}_([0]?[1-9]|[1][0-2])([0]?[1-9]|[1|2][0-9]|[3][0|1])([2000-2099]{4}).cta$

この文字列は失敗します

abscriprod_01152013.cta

この文字列は機能します

abscriprod_11152012.cta

3 ~ 8 で終わる年は失敗するようですが、その理由はわかりません。

PS私はRegExが苦手なので、ここに露骨な間違いがあっても笑わないでください:-)

4

2 に答える 2

4

perlretutなどの正規表現のマニュアルを読む必要があります。使用する正規表現には複数の欠陥が含まれています。

  1. のように 1 文字しか含まない文字クラスは、/[0]/単純に のように記述した方が適切です/0/
  2. A/./は任意の文字に一致します (改行を除く)。リテラルのドットに一致させるには、エスケープする必要があります: /\./.
  3. '1' または '2' に一致する文字クラスが記述されていない可能性がありますが、中間にパイプ/[1|2]/がありません。/[12]/そこにパイプを置くと、「1」、「2」、または「|」の 3 文字のいずれかと一致します。
  4. 2000 から 2099 の範囲の数値を照合する場合、/[2000-2099]/そのような文字クラスは文字 '0'、'1' (0-2 のため)、'2'、または '9' のいずれかと一致するため、使用できません。代わりに、 を使用できます/20\d\d/

h2h

于 2013-01-17T15:38:27.743 に答える
1

このビットのために失敗します:

[2000-2099]{4}

これは本当に言っています:

の文字 2 または 0 のいずれか200

0 から 2 の範囲の文字0-2

次に、0 または 9 のいずれかの文字099

2000年から2099年までの4桁の年が必要だと思うので、一致させるには:

20\d\d
于 2013-01-17T15:33:08.767 に答える