正規表現チートシート

中級 | 15分 で読める | 2025.01.10

基本的なメタ文字

パターン説明
.任意の1文字(改行以外)a.c → abc, aXc
^行頭^Hello
$行末World$
\エスケープ\. → ピリオド
|OR(いずれか)cat|dog

文字クラス

パターン説明
[abc]a, b, c のいずれか[aeiou] → 母音
[^abc]a, b, c 以外[^0-9] → 数字以外
[a-z]a〜zの範囲[A-Za-z] → 英字
[0-9]0〜9の範囲[0-9]+ → 数字

特殊文字クラス

パターン説明等価
\d数字[0-9]
\D数字以外[^0-9]
\w単語文字[A-Za-z0-9_]
\W単語文字以外[^A-Za-z0-9_]
\s空白文字[ \t\n\r\f]
\S空白以外[^ \t\n\r\f]
\b単語境界\bword\b
\B単語境界以外

量指定子

パターン説明
*0回以上a* → "", a, aa, aaa
+1回以上a+ → a, aa, aaa
?0回または1回colou?r → color, colour
{n}ちょうどn回a{3} → aaa
{n,}n回以上a{2,} → aa, aaa, aaaa
{n,m}n〜m回a{2,4} → aa, aaa, aaaa

最短マッチ(非貪欲)

パターン説明
*?0回以上(最短)
+?1回以上(最短)
??0回または1回(最短)
{n,m}?n〜m回(最短)
// 貪欲(デフォルト)
"<div>a</div><div>b</div>".match(/<div>.*<\/div>/);
// "<div>a</div><div>b</div>"

// 非貪欲
"<div>a</div><div>b</div>".match(/<div>.*?<\/div>/);
// "<div>a</div>"

グループ化

パターン説明
(abc)キャプチャグループ(\d+)-(\d+)
(?:abc)非キャプチャグループ(?:https?|ftp)://
(?<name>abc)名前付きグループ(?<year>\d{4})
\1, \2後方参照(\w+)\s\1 → word word
// キャプチャグループ
const match = "2025-01-10".match(/(\d{4})-(\d{2})-(\d{2})/);
// match[1] = "2025", match[2] = "01", match[3] = "10"

// 名前付きグループ
const match = "2025-01-10".match(/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/);
// match.groups.year = "2025"

先読み・後読み

パターン説明
(?=abc)肯定先読み\d+(?=円) → “100”円
(?!abc)否定先読み\d+(?!円) → 100ドル
(?<=abc)肯定後読み(?<=\$)\d+ → $“100”
(?<!abc)否定後読み(?<!\$)\d+
// 先読み:後ろに「円」がある数字
"100円 200ドル".match(/\d+(?=円)/g);  // ["100"]

// 後読み:前に「$」がある数字
"$100 200円".match(/(?<=\$)\d+/g);  // ["100"]

フラグ

フラグ説明
gグローバル(全てにマッチ)
i大文字小文字を区別しない
m複数行モード(^$が各行に)
s.が改行にもマッチ
uUnicode対応
// 複数のフラグ
/pattern/gi

// 大文字小文字無視
"Hello WORLD".match(/hello/i);  // ["Hello"]

// グローバル
"a1b2c3".match(/\d/g);  // ["1", "2", "3"]

よく使うパターン

メールアドレス

^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$

URL

https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)

電話番号(日本)

0\d{1,4}-?\d{1,4}-?\d{4}

郵便番号(日本)

^\d{3}-?\d{4}$

日付(YYYY-MM-DD)

^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$

IPアドレス

^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

パスワード(8文字以上、英大小数字含む)

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$

HTMLタグ

<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)

全角文字

[^\x01-\x7E]

日本語(ひらがな・カタカナ・漢字)

[\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FAF]

JavaScript での使用

// テスト
/\d+/.test("abc123");  // true

// マッチ
"hello123world456".match(/\d+/g);  // ["123", "456"]

// 置換
"hello world".replace(/world/, "JavaScript");
"a1b2c3".replace(/\d/g, "X");  // "aXbXcX"

// 分割
"a,b;c".split(/[,;]/);  // ["a", "b", "c"]

// 検索
"hello world".search(/world/);  // 6

Python での使用

import re

# マッチ
re.match(r"\d+", "123abc")  # 先頭のみ
re.search(r"\d+", "abc123")  # 最初の1つ
re.findall(r"\d+", "a1b2c3")  # 全て

# 置換
re.sub(r"\d+", "X", "a1b2c3")  # "aXbXcX"

# 分割
re.split(r"[,;]", "a,b;c")  # ["a", "b", "c"]

# コンパイル
pattern = re.compile(r"\d+")
pattern.findall("a1b2c3")

関連記事

← 一覧に戻る