同じ正規表現でも言語によって挙動が違う理由
PCRE、JavaScriptのRegExp、Pythonのreなど、エンジンごとに基本構文は共通していても、\dがASCII数字のみにマッチするかどうかや後読み(lookbehind)への対応状況など細部が異なるため、あるエンジンで動作確認したパターンが別の言語でも同じように動くとは限らない。
正規表現はパターンマッチが得意で、構文解析は苦手
HTMLやJSONのような本格的に構造化されたフォーマットを正規表現だけで扱おうとすると、複雑になるほど壊れやすく保守しにくくなる。メールアドレスの形式チェックや文字列から数字だけを抜き出すような、行単位のフラットな検証・抽出にこそ向いている。
よくある質問
想定より広い範囲にマッチしてしまうのはなぜですか?
多くの場合、貪欲な量指定子が想定以上に長く一致しているのが原因。非貪欲な書き方(*?や+?)に変えるか、広いワイルドカードの代わりに文字クラスを絞り込むとよい。
キャプチャグループと非キャプチャグループの違いは何ですか?
キャプチャグループ(パターン)はマッチした文字列を後で参照(置換文字列などで利用)できるように保存するのに対し、非キャプチャグループ(?:パターン)はグループ化と量指定子の適用範囲だけに影響し、何も保存しない。