正規表現チートシート

AI作成データこのコンテンツのデータはAIが公式資料や辞書を参照して作成しました。正確さを心がけていますが、誤りが含まれる可能性があります。

正規表現(Regular Expression)の基本構文・メタ文字・量指定子・アンカー・グループ・先読み後読みなどを網羅したチートシート。実例付きでわかりやすく解説。

正規表現パターンをすぐ引き出せる。実例付きで意味がわかる

基本メタ文字

正規表現で特別な意味を持つ文字(メタ文字)の一覧です。これらの文字をリテラルとして使いたい場合は、バックスラッシュ(\)でエスケープします。

メタ文字意味
.任意の1文字(改行を除く)a.c → abc, aXc
^行頭^Hello → 行頭のHello
$行末world$ → 行末のworld
*直前の文字の0回以上の繰り返しab*c → ac, abc, abbc
+直前の文字の1回以上の繰り返しab+c → abc, abbc(acは不一致)
?直前の文字の0回または1回colou?r → color, colour
\次の文字をエスケープ\. → ピリオドそのもの
|OR(選択)cat|dog → cat または dog
[]文字クラス(いずれか1文字)[abc] → a, b, c のいずれか
()グループ化・キャプチャ(ab)+ → ab, abab
regex
# メタ文字の使用例
/a.c/      # abc, aXc, a1c にマッチ
/^Start/   # 行頭の Start にマッチ
/end$/     # 行末の end にマッチ
/https?/   # http または https にマッチ
/cat|dog/  # cat または dog にマッチ
/\./      # ピリオドそのものにマッチ

量指定子

直前のパターンの繰り返し回数を指定します。デフォルトは貪欲(greedy)マッチで、できるだけ多くマッチします。

量指定子意味
*0回以上a* → "", a, aa, aaa
+1回以上a+ → a, aa, aaa
?0回または1回a? → "", a
{n}ちょうどn回a{3} → aaa
{n,}n回以上a{2,} → aa, aaa, aaaa
{n,m}n回以上m回以下a{2,4} → aa, aaa, aaaa

貪欲(Greedy)と怠惰(Lazy)

量指定子の後に ? を付けると、怠惰マッチになり、できるだけ少なくマッチします。

regex
# 貪欲マッチ(デフォルト)
"<b>太字</b>と<b>強調</b>" に /<b>.*<\/b>/ を適用
→ "<b>太字</b>と<b>強調</b>" 全体にマッチ

# 怠惰マッチ(?を追加)
"<b>太字</b>と<b>強調</b>" に /<b>.*?<\/b>/ を適用
→ "<b>太字</b>" と "<b>強調</b>" に個別マッチ
貪欲怠惰意味
**?0回以上(最小マッチ)
++?1回以上(最小マッチ)
???0回または1回(最小マッチ)
{n,m}{n,m}?n回以上m回以下(最小マッチ)

文字クラス

特定の種類の文字にマッチするショートハンドです。大文字にすると否定形になります。

パターン意味同等の表記
\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]

カスタム文字クラス

角括弧 [] で独自の文字クラスを定義できます。先頭に ^ を置くと否定になります。

regex
[abc]      # a, b, c のいずれか
[a-z]      # 小文字アルファベット
[A-Z]      # 大文字アルファベット
[0-9]      # 数字
[a-zA-Z]   # すべてのアルファベット
[^abc]     # a, b, c 以外の文字
[a-z&&[^m-p]]  # a-z のうち m-p を除く(一部エンジン)

アンカー

文字そのものではなく、文字列中の位置にマッチします。文字を消費しない(ゼロ幅アサーション)のが特徴です。

アンカー意味
^文字列(または行)の先頭^abc → 先頭のabc
$文字列(または行)の末尾abc$ → 末尾のabc
\b単語境界\bword\b → 単語として独立したword
\B単語境界以外\Bword\B → 単語の内部にあるword
regex
# アンカーの使用例
/^#!/         # シェバン行の検出
/\.js$/      # .js で終わるファイル名
/\bcat\b/   # "cat" に一致、"category" には不一致
/\Bcat\B/   # "education" の cat に一致、"cat" には不一致

グループとキャプチャ

丸括弧でパターンをグループ化し、マッチした部分を後から参照できます。

構文意味
(abc)キャプチャグループマッチ結果を後方参照可能
(?:abc)非キャプチャグループグループ化のみ(キャプチャしない)
(?<name>abc)名前付きキャプチャ名前でマッチ結果を参照
\1, \2後方参照キャプチャグループの内容を再利用
regex
# キャプチャグループの使用例
/(\d{4})-(\d{2})-(\d{2})/
# "2026-02-19" → グループ1: "2026", グループ2: "02", グループ3: "19"

# 名前付きキャプチャ
/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/
# result.groups.year → "2026"

# 非キャプチャグループ
/(?:https?|ftp):\/\//
# プロトコル部分をグループ化するが、キャプチャしない

# 後方参照(同じ内容の繰り返し検出)
/(\w+)\s+\1/
# "the the" にマッチ(重複単語の検出)

先読みと後読み

文字を消費せずに、前後のパターンを条件として指定できます(ゼロ幅アサーション)。

構文名前意味
(?=abc)肯定先読み(Lookahead)後ろにabcが続く位置
(?!abc)否定先読み(Negative Lookahead)後ろにabcが続かない位置
(?<=abc)肯定後読み(Lookbehind)前にabcがある位置
(?<!abc)否定後読み(Negative Lookbehind)前にabcがない位置
regex
# 肯定先読み: 円記号の前の数値を取得
/\d+(?=円)/
# "100円" → "100" にマッチ

# 否定先読み: .js 拡張子でないファイル名
/\w+\.(?!js$)\w+/
# "app.ts" にマッチ、"app.js" には不一致

# 肯定後読み: ¥マークの後の数値を取得
/(?<=¥)\d+/
# "¥1000" → "1000" にマッチ

# 否定後読み: Mr. でない敬称の後の名前
/(?<!Mr\.)\s[A-Z]\w+/
# "Dr. Smith" の " Smith" にマッチ

フラグ

正規表現の動作を変更するオプションです。パターンの末尾に指定します。

フラグ名前説明
gglobalすべてのマッチを検索(最初の1つだけでなく)
icase-insensitive大文字・小文字を区別しない
mmultiline^$ が各行の先頭・末尾にマッチ
sdotAll. が改行文字にもマッチ
uunicodeUnicode対応(サロゲートペアを正しく扱う)
ystickylastIndexの位置からのみマッチを試行
regex
# フラグの使用例(JavaScript)
/hello/i        # "Hello", "HELLO", "hello" にマッチ
/^line/gm       # 各行の先頭にある "line" をすべて検索
/a.b/s          # "a\nb" にもマッチ(.が改行を含む)
/\u{1F600}/u   # Unicode絵文字にマッチ

# 複数フラグの組み合わせ
/pattern/gi     # 大文字小文字無視 + 全マッチ検索

よく使うパターン例

実務で頻繁に使われる正規表現パターンの一覧です。

メールアドレス

regex
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
# user@example.com にマッチ

URL

regex
/https?:\/\/[\w\-]+(\.[\w\-]+)+[\/\w\-._~:?#\[\]@!$&'()*+,;=]*/
# https://example.com/path?q=1 にマッチ

電話番号(日本)

regex
/0\d{1,4}-\d{1,4}-\d{4}/
# 03-1234-5678, 090-1234-5678 にマッチ

# ハイフンなし・ありの両対応
/0\d{9,10}/
# 09012345678 にマッチ

日付

regex
# YYYY-MM-DD 形式
/\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])/
# 2026-02-19 にマッチ

# YYYY/MM/DD 形式
/\d{4}\/(?:0[1-9]|1[0-2])\/(?:0[1-9]|[12]\d|3[01])/
# 2026/02/19 にマッチ

IPアドレス(IPv4)

regex
/(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)/
# 192.168.1.1 にマッチ

郵便番号(日本)

regex
/\d{3}-\d{4}/
# 100-0001 にマッチ

HTMLタグの除去

regex
/<[^>]+>/g
# "<p>テキスト</p>" → "テキスト"(置換時)

パスワード強度チェック

regex
# 8文字以上、大文字・小文字・数字・記号をそれぞれ1つ以上含む
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,}$/

こんなときに使えます

シーン[0-9]+
得られる情報電話番号 090-1234-5678 から数字部分 090, 1234, 5678 を抽出

数字の連続にマッチするパターンの使用例

よくある質問

JavaScriptとPythonで正規表現の文法に違いはありますか?
基本的な構文は共通ですが、一部違いがあります。例えばJavaScriptでは後読み(lookbehind)のサポートが比較的新しく、Pythonには名前付きグループの記法に(?P<name>...)という独自の書き方があります。また、Pythonにはre.VERBOSEフラグでコメント付き正規表現が書ける機能があります。
全角文字にマッチさせるにはどうすればいいですか?
Unicodeの範囲指定を使います。例えば全角ひらがなは[\u3040-\u309F]、全角カタカナは[\u30A0-\u30FF]、漢字は[\u4E00-\u9FFF]でマッチできます。JavaScriptではUnicodeプロパティエスケープ(\p{Script=Hiragana})も利用可能です。
正規表現のパフォーマンスが悪い場合はどうすればいいですか?
ネストした量指定子(例: (a+)+)や過度なバックトラッキングが原因のことが多いです。具体的な文字クラスを使う、不要なキャプチャグループを非キャプチャ(?:...)に変える、アンカー(^や$)を活用するなどの対策が有効です。