「\d+」「^[a-z]+@[a-z]+.[a-z]+$」——コードや設定ファイルを見るときに、こうした記号の羅列を見て「正規表現は難しそう」と感じたことはありませんか。正規表現は一度覚えるとテキスト処理が格段に速くなる便利な道具ですが、記号の意味を知らないと読むのも書くのも大変です。
この記事では、正規表現の基本記号から実用的なパターン、テスト方法までを初心者向けに解説します。読み終わるころには、よく使うパターンを読めるようになり、自分で簡単なパターンを書けるようになります。
正規表現とは?
正規表現(せいきひょうげん、regex)は、文字列のパターンを記号で表現する記法です。「電話番号の形式に合っているか」「テキストの中から日付をすべて抜き出す」など、文字列の検索・置換・検証に使われます。
プログラミング言語だけでなく、テキストエディタの検索機能やGoogleスプレッドシートの関数でも使えるため、開発者以外にも役立つスキルです。
基本記号の一覧
まず、正規表現で使う基本記号を覚えましょう。
| 記号 | 意味 | 例 | マッチする文字列 |
|---|---|---|---|
\d |
数字1文字 | \d |
5 |
\w |
英数字と_(アンダースコア) | \w |
A, b, 9, _ |
\s |
空白文字(スペース・タブ・改行) | \s |
「 」 |
. |
任意の1文字 | . |
a, 5, あ |
+ |
直前のパターンが1回以上 | a+ |
a, aa, aaa |
* |
直前のパターンが0回以上 | a* |
(空), a, aa |
? |
直前のパターンが0回または1回 | colou?r |
color, colour |
^ |
行の先頭 | ^abc |
abc…(先頭のみ) |
$ |
行の末尾 | abc$ |
…abc(末尾のみ) |
[ ] |
角括弧内のいずれか1文字 | [abc] |
a, b, c |
{n} |
直前のパターンがn回 | \d{3} |
123 |
| ` | ` | または | `cat |
エスケープに注意:正規表現で特別な意味を持つ記号そのものを検索したいときは、直前に \ を付けます。たとえば「.」(ピリオド)そのものは \.、「+」そのものは \+ と書きます。
よく使うパターン例
基本記号を組み合わせると、実用的なパターンが書けます。
| 目的 | パターン | 説明 |
|---|---|---|
| 3桁の数字 | \d{3} |
123, 456 |
| 郵便番号(123-4567) | \d{3}-\d{4} |
123-4567 |
| 電話番号 | \d{2,4}-\d{4}-\d{4} |
090-1234-5678 |
| メールアドレス(簡易) | ^\S+@\S+\.\S+$ |
[email protected] |
| 半角英数字のみ | ^[a-zA-Z0-9]+$ |
abc123 |
| ひらがなのみ | ^[ぁ-ん]+$ |
ひらがな |
注意:メールアドレスの完全な検証は、RFC規格に沿うと非常に複雑になります。上の例は簡易的なパターンです。本格的な検証には、入力欄の type="email" 属性や専用ライブラリを使うのが確実です。
文字クラスの応用
角括弧 [ ] を使った「文字クラス」は、柔軟なマッチに欠かせません。
| パターン | 意味 | マッチする例 |
|---|---|---|
[abc] |
a, b, c のいずれか1文字 | a |
[a-z] |
小文字アルファベット1文字 | x |
[A-Za-z0-9] |
英字または数字1文字 | Q, 7 |
[^abc] |
a, b, c 以外の1文字(否定) | x, 5 |
[ぁ-ん] |
ひらがな1文字 | あ |
先頭に ^ を置くと「以外」を意味する否定文字クラスになります。たとえば [^0-9] は「数字以外の1文字」にマッチします。
グループ化で部分を取り出す
括弧 ( ) でパターンを囲むと、グループ化ができます。グループにすると「その部分だけを取り出す」ことが可能です。
たとえば「2026-08-29」から年月日を個別に取り出したいときは、次のように書きます。
(\d{4})-(\d{2})-(\d{2})
1つ目の括弧が年、2つ目が月、3つ目が日に対応し、ツールやプログラムからそれぞれを取り出せます。また、グループ化は「この部分をひとまとまりとして繰り返す」ときにも使います(例: (ab)+ は ab、abab にマッチ)。
貪欲マッチと最短マッチ
+ や * は、デフォルトではできるだけ長くマッチしようとする(貪欲マッチ)性質があります。これが思わぬ結果の原因になることがあります。
たとえば <.+> は「< から > まで」に見えますが、テキスト内に > が複数あると、最後の > までまとめてマッチしてしまいます。
入力:<b>太字</b>
貪欲マッチ <.+> → <b>太字</b> 全体
最短マッチ <.+?> → <b> のみ
記号の後に ? を付けると最短マッチ(できるだけ短く)になります。HTMLタグのような対になっている記号を取り出すときは、最短マッチを覚えておくと便利です。
フラグで動作を変える
正規表現には、検索の挙動を変える「フラグ」があります。主なフラグは次のとおりです。
| フラグ | 意味 | 効果 |
|---|---|---|
g |
global | すべてのマッチを検索(指定しないと最初の1件のみ) |
i |
ignore case | 大文字と小文字を区別しない |
m |
multiline | 複数行テキストで行ごとに ^ と $ を判定 |
s |
dotall | . が改行にもマッチする |
u |
unicode | Unicodeモード(日本語などの正確な処理) |
たとえば「hello」という単語を大文字小文字を区別せずにすべて検索するなら「/hello/gi」のように書きます。
パターンを組み立てる思考の流れ
実際にパターンを書くときは、対象の文字列を部分に分解して、各部分に対応する記法を当てはめるのがコツです。「090-1234-5678」という電話番号のパターンを組み立てる過程を見てみましょう。
- 構造を分解する: 「数字2〜4桁」+「ハイフン」+「数字4桁」+「ハイフン」+「数字4桁」
- 各部分を記法に置き換える:
- 数字2〜4桁 →
\d{2,4}({2,4}は「2〜4回」の意味) - ハイフン →
-(そのまま) - 数字4桁 →
\d{4}
- 数字2〜4桁 →
- 連結する:
\d{2,4}-\d{4}-\d{4} - テストして確認: 実際の電話番号でマッチするか、ツールで確認する
この「分解 → 置き換え → 連結 → テスト」の流れを意識すると、複雑なパターンでも落ち着いて書けます。いきなり全部を正しく書こうとせず、テストしながら少しずつ組み立てるのが上達の近道です。
Tools Hubの正規表現テストツールで確認
書いた正規表現が正しく動くか確認するには、Tools Hubの正規表現テストツールが便利です。パターンとテスト文字列を入力すると、マッチした箇所がハイライトされ、マッチ一覧も表示されます。
使い方(3ステップ)
パターンとフラグを入力
正規表現のパターンを入力し、必要なフラグ(g・i・m・s・u)を指定します。
テスト文字列を入力
マッチを確認したい文字列を入力します。入力するとリアルタイムで結果が表示されます。
マッチを確認
マッチした箇所がハイライトされ、マッチした文字列の一覧が表示されます。パターンに誤りがあればエラーも表示されます。
この記事で紹介したツール
正規表現テストツール
ブラウザで完結・無料・登録不要。マッチ結果をリアルタイムで確認できます。
まとめ
- 正規表現は文字列のパターンを記号で表現する記法
- 基本は
\d(数字)・\w(英数字)・.(任意の1文字)・+(1回以上)・*(0回以上) - 特殊記号そのものを検索するときは
\でエスケープする g・i・mなどのフラグで検索の挙動を変えられる- メールアドレスの完全な検証は複雑なので、簡易パターン+標準機能で補う
- 書いた正規表現はツールでテストしてから使うのが確実
正規表現は、すべてを一度に覚えようとすると大変です。まずは \d と + だけでも使えるようになると、実務で役立つ場面が広がります。書いたパターンはツールでテストしながら、少しずつ複雑なパターンに挑戦してみてください。
よくある質問
正規表現は何に使えますか?
文字列の検索・置換・検証に使えます。フォームの入力チェック、ログからのデータ抽出、テキストの一括置換など、開発から日常業務まで幅広く役立ちます。
「\d」と「[0-9]」の違いはありますか?
同じ意味です。\d は数字1文字の省略記法で、[0-9] は「0から9のいずれか1文字」を表します。どちらも同じ結果になります。
パターンエラーが出たらどうすればいいですか?
正規表現の構文に誤りがあります。括弧 ( ) の対応が取れているか、特殊文字のエスケープ(\)が漏れていないかを確認してください。エラー内容には原因のヒントが表示されます。
正規表現をテストする方法はありますか?
Tools Hubの正規表現テストツールなら、パターンとテスト文字列を入力するだけで、マッチした箇所がハイライト表示されます。リアルタイムで結果が確認できるため、パターンのデバッグに便利です。