regex cheat-sheet programming javascript python dev-tech

正規表現チートシート:視覚的例付き完全リファレンス

メタ文字、量詞、アンカー、前方・後方参照、および鉄道図を網羅した包括的な正規表現リファレンスガイド。開発者やデータアナリストに最適です。

正規表現チートシート:究極リファレンス

正規表現(Regex)は非常に強力ですが、習得が難しいことでも知られています。メールアドレスのバリデーション、データのスクレイピング、あるいはコード内の検索など、信頼できる正規表現チートシートがあれば、作業時間を大幅に短縮できます。

このガイドでは、基本文字から複雑な前方・後方参照まで、すべての正規表現コンポーネントを視覚的な解説と実例付きで解説します。


1. 主要なメタ文字

これらはあらゆる正規表現パターンの基本要素です。

メタ文字 説明
. 改行を除く任意の 1 文字に一致 a.bacb, a1b に一致
\ 特殊文字をエスケープ \. はリテラルとしての . に一致
| 選択 (OR) cat|dogcat または dog に一致
[] 文字セット(括弧内の任意の文字) [aeiou] は任意の母音に一致
[^] 否定文字セット [^0-9] は数字以外の任意の文字に一致

2. 量詞:出現回数の制御

量詞は、文字やグループが何回出現すべきかを指定します。

量詞 説明
* 0 回以上 a* は ``, a, aa に一致
+ 1 回以上 a+a, aa に一致
? 0 回または 1 回 (オプション) a? は `` または a に一致
{n} ちょうど n a{3}aaa に一致
{n,} n 回以上 a{2,}aa, aaa に一致
{n,m} n 回から m 回の間 a{2,4}aa, aaa, aaaa に一致

3. 文字クラス:一般的なショートカット

クラス 説明 同等表現
\d 任意の数字 [0-9]
\D 数字以外の任意の文字 [^0-9]
\w 任意の英単語文字(英数字 + _ [a-zA-Z0-9_]
\W 英単語文字以外の任意の文字 [^a-zA-Z0-9_]
\s 任意の空白文字(スペース、タブ、改行) [ \t\n\r\f\v]
\S 空白文字以外の任意の文字 [^ \t\n\r\f\v]

4. アンカー:境界の定義

アンカー 説明
^ 文字列/行の先頭 ^Hello
$ 文字列/行の末尾 World$
\b 単語の境界 \bcat\b ("cat" には一致するが "category" には一致しない)
\B 単語の境界以外 \Bcat ("category" 内の "cat" に一致)

5. グループとキャプチャ

構文 説明
(...) キャプチャグループ (abc)+abcabc に一致
(?:...) 非キャプチャグループ (?:abc)+
(?<name>...) 名前付きキャプチャグループ (?<id>\d+)
\1 グループ1への後方参照 (\w)\1aa, bb に一致

6. 前方・後方参照 (Lookaround):高度なフィルタリング

Lookaround を使用すると、特定のパターンの前後に別のパターンが存在する(または存在しない)場合にのみ一致させることができます。Lookaround 部分は一致結果には含まれません。

構文 名称 説明
(?=...) 肯定先読み (Positive Lookahead) 後ろに ... が続く
(?!...) 否定先読み (Negative Lookahead) 後ろに ... が続かない
(?<=...) 肯定戻り読み (Positive Lookbehind) 前に ... がある
(?<!...) 否定戻り読み (Negative Lookbehind) 前に ... がない

7. 鉄道図 (Railroad Diagrams) による正規表現の可視化

複雑な正規表現パターンは、すぐに判読不能になることがあります。鉄道図は、正規表現の流れを視覚的に表現する方法です。

線路を想像してください:

  1. 線路は選択 (|) で分岐します。
  2. 線路は量詞 (*, +) でループします。
  3. 線路はグループのボックスを通過します。

可視化ツールを使用すると、ネストされたグループや複雑な量詞を扱う際のロジックエラーをデバッグするのに役立ちます。


8. 実践的な例

メールアドレスのバリデーション(簡略版)

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

強力なパスワード(Lookahead の例)

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$ (小文字、大文字、数字をそれぞれ 1 つ以上含み、8 文字以上)

電話番号(米国形式)

^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$


9. よくある質問 (FAQ)

Q: 「強欲 (Greedy)」と「無欲 (Lazy)」な一致の違いは何ですか?

A: デフォルトでは、量詞は強欲であり、可能な限り長い文字列に一致しようとします。量詞の後に ? を付ける(例: .*?)と、無欲(または非強欲)になり、可能な限り短い文字列に一致します。

Q: 大文字と小文字を区別せずに検索するにはどうすればよいですか?

A: 多くの正規表現エンジンでは、フラグ(通常は i)を使用して大文字小文字の区別を無効にします。例えば、/hello/iHello, HELLO, hello すべてに一致します。

Q: バックトラッキングとは何ですか?なぜ重要なのですか?

A: 正規表現エンジンがあるパスを試して失敗し、別のパスを試すために「戻る」ときにバックトラッキングが発生します。ネストされた量詞を持つ複雑なパターンは、壊滅的なバックトラッキングを引き起こし、アプリケーションやサーバーがフリーズする原因になることがあります。


Tool3M でパターンをテストする