(\d+|)
対(\d+)?
[\w\W]
対[\d\D]
対.
これらの通常の正規表現に違いはありますか? どちらを選ぶべきですか?
私はJavascriptを使用しています。
[\w\W]
[\d\D]
dotall オプションがない JavaScript などの言語で使用されます。改行以外のすべてに一致するとは異なり、改行を含むすべての文字に一致します。.
\w\W or \d\D -> matches everything including newline characters
. -> matches everything except newline characters unless
's' (dotall modifier) is specified
(\d+|) or (\d+)? -> matches 1 or more digits OR any position (null)
It could simply be written as '(\d*)'
2 番目のものは非常に興味深いものであり、それについて何か言いたいことがあります。
[\w\W]
と[\d\D]
は同等であり、またと同等[\s\S]
です。\W
は の補数文字セットで\w
あり、同じことが - ペア および - ペア に適用\D
さ\d
れ\S
ます\s
。したがって、組み合わせると、例外なくどのキャラクターにも一致します。
これらは通常、「例外なく任意の文字に一致する」という構造がない場合に使用されます。JavaScript はそのようなケースの一例です。JavaScript でこれを行うための、あまり知られていない非常に紛らわしい構造もありますが[^]
、これは通常、他のフレーバーでは無効です。
ドット.
は通常、任意の文字に一致しますが、改行\n
. 言語によっては、さらに多くの文字が除外される場合があります。
Javaの場合、、、、、\n
およびは除外さ\r
れ\u0085
ます。したがって、 aは次と同等です\u2028
\u2029
.
[^\n\r\u0085\u2028\u2029]
JavaScriptの場合、ドットは、、およびに加えて.
除外されます。と同等です\r
\u2028
\u2029
\n
.
[^\n\r\u2028\u2029]
一部の言語には、例外なく.
任意の文字に一致させるモードがあります。Java と Python ではモード、C# と Perlではモードと呼ばれます。DOTALL
SingleLine
の動作は.
言語によって異なります。一般に、「通常」モードで除外する必要があることに全員が同意し\n
ますが、さらに除外することを選択する点で若干異なる場合があります。
どの言語を使用しているかは言われなかったので、Perl だと仮定します。
(\d+|)
と同等(\d*)
です。0 個以上の数字のシーケンスに一致し、結果を に取り込み$1
ます。(\d)?
0 または 1 桁に一致します。数字と一致する場合は、それを$1
;に入れます。そうでない場合は次の$1
ようになります(を削除するundef
ように書き直すことができます)。(?:(\d)|)
?
[\w\W]
と[\d\D]
は同等で、任意の文字に一致します。.
デフォルトでは と同等[^\n]
です (改行以外の任意の文字に一致)。本当に任意の文字に一致させたい場合は、任意の文字に一致させるフラグを使用.
して指定する必要があります。/s
.