プログラミングやテキスト処理で避けて通れない正規表現(Regular Expression)。
「なんだか難しそう...」「記号がたくさんで意味不明...」と感じる方も多いのではないでしょうか。
この記事では、正規表現の基本パターンから実践的な使用例まで、初心者でもわかるように解説します。
正規表現とは
正規表現(Regex、Regexp)は、文字列のパターンを表現するための記法です。
例えば「電話番号を探したい」「メールアドレスをチェックしたい」といったときに使います。
正規表現でできること
- ✅ 検索:特定のパターンに一致する文字列を見つける
- ✅ 置換:パターンに一致した部分を別の文字列に変える
- ✅ バリデーション:入力値が正しい形式かチェックする
- ✅ 抽出:特定のパターンの部分だけを取り出す
使用例
Excelの検索、テキストエディタの検索・置換、プログラミング、データベース検索など、様々な場面で活躍します。
基本のパターン
そのまま文字を検索
最もシンプルな正規表現は、検索したい文字をそのまま書くことです。
正規表現: hello
対象: "hello world"
結果: "hello" がマッチ
任意の1文字にマッチ(.)
ドット(.)は任意の1文字にマッチします。
正規表現: h.llo
対象: "hello", "hallo", "h9llo"
結果: すべてマッチ
行の先頭と末尾(^ $)
^hello → 行頭の "hello" にマッチ
hello$ → 行末の "hello" にマッチ
^hello$ → "hello" のみの行にマッチ
メタ文字一覧
正規表現で特別な意味を持つ文字をメタ文字と呼びます。
| メタ文字 | 意味 | 例 |
|---|---|---|
. |
任意の1文字 | a.c → abc, aXc |
^ |
行頭 | ^Hello |
$ |
行末 | end$ |
* |
0回以上の繰り返し | ab*c → ac, abc, abbc |
+ |
1回以上の繰り返し | ab+c → abc, abbc |
? |
0回または1回 | colou?r → color, colour |
| |
または(OR) | cat|dog |
\ |
エスケープ | \. → ドット文字自体 |
エスケープに注意
メタ文字をそのまま検索したい場合は、バックスラッシュ(\)でエスケープします。例:\.、\*、\?
量指定子
繰り返しの回数を指定するのが量指定子です。
| 量指定子 | 意味 | 例 |
|---|---|---|
{n} |
ちょうどn回 | a{3} → aaa |
{n,} |
n回以上 | a{2,} → aa, aaa, aaaa... |
{n,m} |
n回以上m回以下 | a{2,4} → aa, aaa, aaaa |
* |
{0,}と同じ | a* → 空, a, aa... |
+ |
{1,}と同じ | a+ → a, aa, aaa... |
? |
{0,1}と同じ | a? → 空, a |
文字クラス
特定の種類の文字にマッチする文字クラスを使うと、便利です。
角括弧による文字クラス
[abc] → a, b, c のいずれか1文字
[a-z] → 小文字アルファベット1文字
[A-Z] → 大文字アルファベット1文字
[0-9] → 数字1文字
[a-zA-Z] → アルファベット1文字
[^abc] → a, b, c 以外の1文字(否定)
ショートカット
| ショートカット | 意味 | 同等の表現 |
|---|---|---|
\d |
数字 | [0-9] |
\D |
数字以外 | [^0-9] |
\w |
英数字とアンダースコア | [a-zA-Z0-9_] |
\W |
上記以外 | [^a-zA-Z0-9_] |
\s |
空白文字 | スペース、タブ、改行 |
\S |
空白以外 | - |
実践例
電話番号(日本)
0\d{1,4}-\d{1,4}-\d{4}
例: 03-1234-5678, 090-1234-5678
メールアドレス(簡易版)
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
例: user@example.com
郵便番号(日本)
\d{3}-\d{4}
例: 123-4567
URL
https?://[\w/:%#\$&\?\(\)~\.=\+\-]+
例: https://example.com/page
日付(YYYY-MM-DD)
\d{4}-\d{2}-\d{2}
例: 2026-01-21
完璧を目指さない
実務では「厳密なバリデーション」より「大まかなパターンマッチ」で十分なことが多いです。複雑すぎる正規表現は保守が困難になります。
よくある間違い
1. エスケープ忘れ
間違い: example.com → example任意com にマッチ
正解: example\.com → example.com のみ
2. 貪欲マッチ
対象: <div>hello</div><div>world</div>
貪欲: <div>.*</div> → 全体にマッチ
非貪欲: <div>.*?</div> → 最初のdivのみ
3. ^と$の誤解
^abc$ → "abc"だけの行にマッチ
abc → "xyzabc123" でも "abc" 部分にマッチ
4. 文字クラス内のハイフン
間違い: [a-z-0-9] → 予期しない動作
正解: [a-z0-9-] → ハイフンは最後に
正解: [a-z\-0-9] → エスケープする
テストツール
正規表現を書いたら、必ずテストしましょう。
おすすめのテストツール
- Handy Box 正規表現テスター:日本語で使いやすい、リアルタイムテスト
- regex101:詳細な解説付き、多言語対応
- Regexr:ビジュアルで分かりやすい
テストのコツ
- ✅ 正しくマッチするケースを確認
- ✅ マッチしてはいけないケースも確認
- ✅ エッジケース(空文字、特殊文字)を試す
🔍 正規表現をテストしよう
Handy Boxの正規表現テスターなら、リアルタイムでマッチ結果を確認。パターンの学習にも最適です。