プログラミングやテキスト処理で避けて通れない正規表現(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の正規表現テスターなら、リアルタイムでマッチ結果を確認。パターンの学習にも最適です。

正規表現テスターを使う →
この記事をシェア