正規表現 入門 - 実務で使う基本パターン20選
正規表現は習得コストが高く敬遠されがちですが、実務で使うパターンは思ったより少ないです。本記事では 「最初の20パターンを覚えるだけで仕事の8割は片付く」 を目標に、ありがちな用例だけを抜粋して解説します。
正規表現テスター を別タブで開いて、コピペしながら読むのがおすすめです。
1. 基本の構文(30秒で復習)
| 記号 | 意味 | 例 |
|---|---|---|
. | 任意の1文字 | a.c → abc, axc |
* | 直前を 0回以上 | ab* → a, ab, abb |
+ | 直前を 1回以上 | ab+ → ab, abbb |
? | 直前を 0または1回 | colou?r |
{n,m} | n回以上m回以下 | \d{3,4} |
[abc] | いずれか1文字 | [aiueo] |
[^abc] | 以外 | [^0-9] |
^ $ | 行頭/行末 | ^abc$ |
\d \w \s | 数字 / 単語文字 / 空白 | 大文字は逆 |
(...) | グループ化 | 後方参照 \1 |
2. 実務で使うパターン20選
メールアドレス(実用版)
^[\w.+-]+@[\w-]+(\.[\w-]+)+$
RFC 完全準拠は不可能。これくらいの「ほぼ十分」で割り切るのがおすすめ。
URL
^https?://[\w.-]+(:\d+)?(/[\w./?%&=#~+-]*)?$
日本の郵便番号
^\d{3}-?\d{4}$
電話番号(日本・ハイフンあり/なし両対応)
^0\d{1,4}-?\d{1,4}-?\d{4}$
IPv4 アドレス
^((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$
日付 (YYYY-MM-DD)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
時刻 (HH:MM:SS)
^([01]\d|2[0-3]):[0-5]\d:[0-5]\d$
日本語ひらがな / カタカナ
^[\u3040-\u309F]+$ # ひらがな ^[\u30A0-\u30FF]+$ # カタカナ
パスワード強度(8文字以上、大小英数記号)
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,}$
16進カラーコード
^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
クレジットカード番号(4桁ごと)
^\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}$
HTML タグ
<([a-z][a-z0-9]*)\b[^>]*>.*?</\1>
連続スペース → 1つ
\s+ # → " " で置換
全角→半角変換用(数字)
[0-9] # マッチさせて Unicode 演算で -0xFEE0
リダイレクト URL からドメインだけ抜く
^https?://([^/]+)
JSON のキー部分
"([^"\\]*(\\.[^"\\]*)*)"\s*:
ファイル拡張子
\.(jpe?g|png|gif|webp|svg)$
UUID v4
^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
連続改行 → 1つ
\n{2,} # → "\n"
行頭の連続スペース(インデント検出)
^( +)
3. JavaScript と Python の違い
| JavaScript | Python | |
|---|---|---|
| マッチ | str.match(/re/g) | re.findall(r're', s) |
| 置換 | str.replace(/re/g, 'x') | re.sub(r're', 'x', s) |
| 大文字無視 | /re/i | re.IGNORECASE |
| 複数行 | /re/m | re.MULTILINE |
| 名前付きグループ | (?<name>...) | (?P<name>...) |
4. ハマりどころ
- 貪欲マッチ vs 非貪欲 —
.*は最長一致。最短にしたいなら.*?。 - エスケープ —
. + * ? ( ) [ ] { } | \\ ^ $はバックスラッシュでエスケープ。 - 改行 — デフォルトで
.は改行にマッチしない。dotall フラグ/s(JS は/s, Python はre.S) で改行も含める。