正規表現の違いは何ですか
[-+]?
と
(-|+)?
同じ意味じゃない?
どちらも同じ文字に一致します。しかし、2 番目の形式では、キャプチャ グループが生成されます。後方参照を使用してグループにアクセスできます (正規表現エンジンに応じて、\1
または..)。$1
アップデート
2 番目の形式は、多くの正規表現エンジンでは無効です。+
(文字どおりに一致する古い正規表現エンジンで有効です)。
特別な意味があるため+
: 前のパターンを 1 回以上繰り返しますが、繰り返すものはありません。
-
それらは同じですが、2番目のフォームのキャプチャまたは+
必要ない可能性があるため、キャラクタークラス(1番目のフォーム)を好みます。
これでも、グループ内のテキストをキャプチャしなくても同等です。
(?:-|+)?
ほとんどの正規表現は、代替グループとスター演算子の形式で配置できます (たとえば、次の[ab]+
ように記述できます(a|b)(a|b)*
)。しかし、これはより冗長なので、他の演算子が存在します。疑問符演算子を正規表現に含めましたが、実際[-+]?
には次と同等です(+|-|)
したがって、実際には違いはありません(他の人が言及したキャプチャを除く)が、他の演算子が正規表現をコンパクトで直感的に理解するのに役立たないという意味ではありません。