正規表現チートシート
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" にマッチフラグ
正規表現の動作を変更するオプションです。パターンの末尾に指定します。
| フラグ | 名前 | 説明 |
|---|---|---|
g | global | すべてのマッチを検索(最初の1つだけでなく) |
i | case-insensitive | 大文字・小文字を区別しない |
m | multiline | ^ と $ が各行の先頭・末尾にマッチ |
s | dotAll | . が改行文字にもマッチ |
u | unicode | Unicode対応(サロゲートペアを正しく扱う) |
y | sticky | lastIndexの位置からのみマッチを試行 |
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+)+)や過度なバックトラッキングが原因のことが多いです。具体的な文字クラスを使う、不要なキャプチャグループを非キャプチャ(?:...)に変える、アンカー(^や$)を活用するなどの対策が有効です。