正規表現言語は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.]
と一致します。1
9
.
[1 .. 9]
と書くことができ[19. ]
、さらにスペースに一致します。上で述べたように、文字クラスでは空白が重要です。
あなたがおそらく意味したこと:
0
数字のいずれかまたは1
に一致させたい場合は9
、範囲を使用できます[0-9]
。マイナスは charclasses の範囲演算子であることを思い出してください。