正規表現とは
正規表現(Regular Expression、略してregex)は、文字列のパターンを表現するための記法です。
たとえば「3桁の数字」を探したいとき、正規表現なら \d{3} と書くだけで済みます。テキストの検索・置換・バリデーションなど、プログラミングから日常作業まで幅広く使えます。
基本的な記法
メタ文字
| 記号 | 意味 | 例 | マッチ |
|---|---|---|---|
. | 任意の1文字 | a.c | abc, aXc, a1c |
\d | 数字(0-9) | \d{3} | 123, 456 |
\w | 英数字+アンダースコア | \w+ | hello, test_1 |
\s | 空白文字 | a\sb | a b |
^ | 行の先頭 | ^Hello | 行頭のHello |
$ | 行の末尾 | end$ | 行末のend |
量指定子
| 記号 | 意味 | 例 | マッチ |
|---|---|---|---|
* | 0回以上 | ab*c | ac, abc, abbc |
+ | 1回以上 | ab+c | abc, abbc(acは×) |
? | 0回か1回 | colou?r | color, colour |
{n} | ちょうどn回 | \d{4} | 2026 |
{n,m} | n回以上m回以下 | \d{2,4} | 12, 123, 1234 |
グループとOR
| 記号 | 意味 | 例 | マッチ |
|---|---|---|---|
(...) | グループ化 | (ab)+ | ab, abab |
[...] | 文字クラス | [aeiou] | a, e, i, o, u |
[^...] | 否定文字クラス | [^0-9] | 数字以外 |
| | OR | cat|dog | cat, dog |
よく使う正規表現パターン集
以下のパターンは正規表現テスターでコピペして試せます。
メールアドレス
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
RFC準拠の完全な正規表現は非常に長くなるため、実用上はこのパターンで十分です。
電話番号(日本)
0\d{1,4}-?\d{1,4}-?\d{3,4}
03-1234-5678、090-1234-5678、0312345678(ハイフンなし)のいずれにもマッチします。
郵便番号
\d{3}-?\d{4}
123-4567 と 1234567 の両方にマッチします。
URL
https?://[\w/:%#\$&\?\(\)~\.=\+\-]+
http:// と https:// の両方に対応します。
IPアドレス(IPv4)
\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\b
0.0.0.0〜255.255.255.255の範囲で正しいIPアドレスにマッチします。
日付(YYYY-MM-DD)
\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])
2026-03-21 のような日付にマッチします。月や日の範囲もチェックします。
日本語の全角文字
[ぁ-んァ-ヶ亜-熙A-Za-z0-9]+
ひらがな・カタカナ・漢字・全角英数にマッチします。
HTMLタグ
<[^>]+>
HTMLタグにマッチします。ただしネストしたタグの解析には正規表現は向いていません。HTMLパーサーの使用を推奨します。
実践テクニック
先読み・後読み
| 記法 | 名称 | 意味 |
|---|---|---|
(?=...) | 肯定先読み | …が後に続く位置にマッチ |
(?!...) | 否定先読み | …が後に続かない位置にマッチ |
(?<=...) | 肯定後読み | …が前にある位置にマッチ |
(?<!...) | 否定後読み | …が前にない位置にマッチ |
例: パスワードのバリデーション(8文字以上、大文字・小文字・数字を含む)
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$
安全なパスワードの作り方はパスワード生成ツールの記事も参考にしてください。
非貪欲マッチ
デフォルトでは、* や + はできるだけ多くマッチします(貪欲マッチ)。? を付けるとできるだけ少なくマッチします。
# 貪欲: <b>太字</b>と<b>太字</b> 全体にマッチ
<b>.*</b>
# 非貪欲: <b>太字</b> 個別にマッチ
<b>.*?</b>
名前付きキャプチャ
(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})
グループに名前を付けると、コードから参照しやすくなります。
正規表現をテストする方法
正規表現は書いてみないと動作がわかりにくいものです。Assistyの正規表現テスターを使えば、以下のことがリアルタイムで確認できます。
- パターンがどこにマッチするかハイライト表示
- マッチした文字列の一覧
- キャプチャグループの中身
- 各種フラグ(g, i, m)の切り替え
言語別の正規表現関数
JavaScript
// テスト
/\d+/.test("abc123"); // true
// マッチ
"abc123".match(/\d+/); // ["123"]
// 置換
"hello world".replace(/world/, "regex"); // "hello regex"
Python
import re
# テスト
re.search(r'\d+', 'abc123') # <Match object>
# 全マッチ
re.findall(r'\d+', 'abc123def456') # ['123', '456']
# 置換
re.sub(r'\d+', 'X', 'abc123') # 'abcX'
よくある落とし穴
1. エスケープ忘れ
. は「任意の1文字」なので、ピリオドそのものにマッチさせるには \. と書く必要があります。
# NG: example.com にも exampleXcom にもマッチ
example.com
# OK: example.com のみ
example\.com
2. 文字クラス内のハイフン
[a-z] の - は範囲を意味します。ハイフンそのものにマッチさせるには先頭か末尾に置きます。
# NG: 意図しない範囲指定
[a-z-A]
# OK
[-a-zA-Z]
3. 改行をまたぐマッチ
. はデフォルトで改行にマッチしません。改行を含めたい場合は [\s\S] を使います。
まとめ
正規表現は、覚えれば覚えるほど作業効率が上がる強力なツールです。まずは基本的なメタ文字と量指定子を覚えて、正規表現テスターで実際に試しながら学ぶのが最速です。
この記事で紹介したパターンをコピペして、テスターで動作を確認してみてください。
この記事の内容はAssistyの正規表現テスターで実際にお試しいただけます。