正規表現言語はPerl に組み込まれていますが (逆も同様です)、Perl と構文を共有しません¹。これは、繰り返しまたは範囲の他の構文を意味します。
1) 正規表現は Perl 文字列と構文を共有しますが、2 つには完全な互換性はありません\b。エスケープの異なる意味を参照してください。
文字クラスは、複数のプロパティのセットを定義します。指定されたプロパティのいずれかが一致する場合、文字クラスが一致します。charclass には以下を含めることができます。
- like
[aeiou](小文字の母音に一致)
- 範囲、コード ポイントの連続した範囲に一致する:
[A-Z](大文字のラテン文字)
- charclass 全体の否定:
[^'](一重引用符ではないすべて)
\d,のような名前付き charclasses \w(そして Unicode プロパティの多くの楽しみ)
- (POSIX 文字クラス)
charclass に 1 つの文字が複数回含まれている場合、セット ユニオンのように動作するため、これは無関係です。
charclasses のメタ文字は次のとおりです。
]: 試合終了。charclassを空にすることはできないため、角括弧を一致させるには[\[\]]、またはを実行する必要があります。[][]
^先頭の位置だけが特殊な否定演算子:[~&|^]は、ビットごとの論理 Perl 演算子のいずれかと一致します。
- 範囲演算子
-. リテラルのマイナスに一致させるには、charclass の最後に置くことができます: クラス[+-*]は無効になります (の*前+にあるため、クラスは空であり、これは違法です) が、問題なく[+*-]動作します
- バックスラッシュは依然としてエスケープ文字です。
/xフラグの下であっても、文字クラス内ではスペースが重要です。
あなたのcharclassesで:
[1..9], と書くこともでき、ピリオドはcharclasses 内のメタ文字ではないため、 、または[19.]と一致します。19.
[1 .. 9]と書くことができ[19. ]、さらにスペースに一致します。上で述べたように、文字クラスでは空白が重要です。
あなたがおそらく意味したこと:
0数字のいずれかまたは1に一致させたい場合は9、範囲を使用できます[0-9]。マイナスは charclasses の範囲演算子であることを思い出してください。