正規表現入門ガイド|基本構文から実践パターンまで【2026年版】
ハウツー New

正規表現入門ガイド|基本構文から実践パターンまで【2026年版】

正規表現の基本構文から実践的なパターンまでを解説。メールアドレス、電話番号、URLの検証パターンや、よく使うメタ文字の一覧表付き。初心者から中級者まで使えるリファレンスガイド。

正規表現 regex プログラミング 開発 テキスト処理

正規表現(Regular Expression、略してregex)は、テキストのパターンマッチングと操作のための強力なツールだ。プログラミング、データ処理、テキストエディタでの検索置換など、あらゆる場面で活躍する。

一見すると暗号のように見える正規表現だが、基本的な構文を理解すれば、複雑なテキスト処理も簡潔に記述できるようになる。

本記事では、正規表現の基本構文から実践的なパターンまでを体系的に解説する。

ツールで試しながら学ぶ L-yard Tools の正規表現テスターを使えば、リアルタイムでパターンをテストできる。本記事のサンプルをコピーして試してみよう。


基本構文

リテラル文字

最もシンプルな正規表現は、マッチさせたい文字そのものだ。

パターン: hello
マッチ: "hello world" の "hello"

大文字小文字は区別される。Hellohelloは別のパターンとして扱われる(フラグで変更可能)。

メタ文字

正規表現には特別な意味を持つメタ文字がある。

メタ文字意味
.任意の1文字a.c → abc, aXc
^行の先頭^Hello → 行頭のHello
$行の末尾end$ → 行末のend
*0回以上の繰り返しab*c → ac, abc, abbc
+1回以上の繰り返しab+c → abc, abbc
?0回または1回colou?r → color, colour
\エスケープ\. → ピリオド自体
``OR(または)
()グループ化(ab)+ → ab, abab
[]文字クラス[aeiou] → 母音
{}繰り返し回数a{2,4} → aa, aaa, aaaa

メタ文字のエスケープ

メタ文字自体をマッチさせたい場合は、バックスラッシュでエスケープする。

パターン: \$100\.00
マッチ: "$100.00"

文字クラス

基本的な文字クラス

角括弧[]で囲んだ文字のいずれかにマッチする。

パターン: [aeiou]
マッチ: 任意の母音1文字
パターン: [0-9]
マッチ: 任意の数字1文字

範囲指定

ハイフンで範囲を指定できる。

パターン意味
[a-z]小文字アルファベット
[A-Z]大文字アルファベット
[a-zA-Z]すべてのアルファベット
[0-9]数字
[a-zA-Z0-9]英数字

否定文字クラス

^を先頭に置くと、「〜以外」を意味する。

パターン: [^0-9]
マッチ: 数字以外の任意の文字

定義済み文字クラス

よく使うパターンには省略記法がある。

省略記法等価な表現意味
\d[0-9]数字
\D[^0-9]数字以外
\w[a-zA-Z0-9_]単語文字
\W[^a-zA-Z0-9_]単語文字以外
\s[ \t\n\r\f]空白文字
\S[^ \t\n\r\f]空白以外

量指定子

基本的な量指定子

量指定子意味
*0回以上a* → "", a, aa, aaa…
+1回以上a+ → a, aa, aaa…
?0回または1回a? → "", a
{n}ちょうどn回a{3} → aaa
{n,}n回以上a{2,} → aa, aaa, aaaa…
{n,m}n回以上m回以下a{2,4} → aa, aaa, aaaa

貪欲と非貪欲

デフォルトでは、量指定子は**貪欲(greedy)**に動作する。つまり、可能な限り長くマッチしようとする。

テキスト: <div>内容</div>
パターン: <.*>
マッチ: "<div>内容</div>" (全体)

?を付けると**非貪欲(lazy)**になり、最短マッチになる。

テキスト: <div>内容</div>
パターン: <.*?>
マッチ: "<div>" (最短)

アンカー

アンカーは位置を指定する。文字自体にはマッチしない。

アンカー意味
^行の先頭
$行の末尾
\b単語の境界
\B単語境界以外

単語境界の例

テキスト: "cat category"
パターン: \bcat\b
マッチ: "cat" のみ(categoryのcatは除外)

グループ化とキャプチャ

基本的なグループ

括弧()でパターンをグループ化できる。

パターン: (ab)+
マッチ: ab, abab, ababab...

キャプチャグループ

グループはキャプチャされ、後から参照できる。

パターン: (\d{4})-(\d{2})-(\d{2})
テキスト: 2026-01-31
グループ1: 2026
グループ2: 01
グループ3: 31

後方参照

キャプチャした内容を同じパターン内で参照できる。

パターン: (\w+)\s+\1
マッチ: "the the"(同じ単語の繰り返し)

非キャプチャグループ

キャプチャ不要な場合は(?:)を使う。

パターン: (?:ab)+c
マッチ: abc, ababc...(グループ化するがキャプチャしない)

先読み・後読み

肯定先読み

(?=pattern) - patternが後に続く位置にマッチ。

パターン: \d+(?=円)
テキスト: "100円、200ドル"
マッチ: "100"(円が続く数字のみ)

否定先読み

(?!pattern) - patternが後に続かない位置にマッチ。

パターン: \d+(?!円)
テキスト: "100円、200ドル"
マッチ: "200"(円が続かない数字)

肯定後読み

(?<=pattern) - patternが前にある位置にマッチ。

パターン: (?<=\$)\d+
テキスト: "$100、200円"
マッチ: "100"($が前にある数字)

否定後読み

(?<!pattern) - patternが前にない位置にマッチ。

パターン: (?<!\$)\d+
テキスト: "$100、200円"
マッチ: "200"

実践パターン集

メールアドレス

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
部分説明
^[a-zA-Z0-9._%+-]+ローカルパート(@の前)
@@記号
[a-zA-Z0-9.-]+ドメイン名
\.[a-zA-Z]{2,}$TLD(.com, .jpなど)

電話番号(日本)

0\d{1,4}-\d{1,4}-\d{4}

マッチ例: 03-1234-5678, 090-1234-5678

ハイフンなしも許容する場合:

0\d{9,10}

URL

https?://[\w\-._~:/?#\[\]@!$&'()*+,;=%]+

日付(YYYY-MM-DD)

\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])

郵便番号(日本)

\d{3}-\d{4}

IPアドレス(IPv4)

\b(?:\d{1,3}\.){3}\d{1,3}\b

より厳密なバージョン(0-255の範囲チェック):

\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\b

フラグ(修飾子)

正規表現の動作を変更するフラグがある。

フラグ意味
i大文字小文字を区別しない
gグローバル(全てのマッチを検索)
m複数行モード(^と$が行頭・行末に)
s.が改行にもマッチ

JavaScriptでの使用例:

const regex = /hello/gi;  // 大文字小文字無視、グローバル

よくある落とし穴

1. 貪欲マッチに注意

// 期待と違う結果
テキスト: <b>太字</b>と<b>強調</b>
パターン: <b>.*</b>
結果: "<b>太字</b>と<b>強調</b>" (全体)

// 正しくは非貪欲を使う
パターン: <b>.*?</b>
結果: "<b>太字</b>", "<b>強調</b>" (個別)

2. 特殊文字のエスケープ忘れ

ピリオド、ドル記号、括弧などはエスケープが必要。

// 間違い
パターン: $100.00
マッチ: 意図しない結果

// 正しい
パターン: \$100\.00
マッチ: "$100.00"

3. 文字クラス内の特殊文字

文字クラス内ではほとんどの特殊文字がリテラルとして扱われる。ただし], \, ^, -は注意。

パターン: [.+*?]  // OK(エスケープ不要)
パターン: [\]]    // ]はエスケープ必要
パターン: [a\-z]  // -はエスケープ必要(範囲と区別)

パフォーマンスのヒント

1. アンカーを活用

^$を使うと、検索範囲が限定されて高速化する。

2. 非キャプチャグループを使う

キャプチャが不要なら(?:)を使う。

3. 過度なバックトラックを避ける

(a+)+のようなネストした量指定子は、指数的なバックトラックを引き起こす可能性がある。

// 危険なパターン
(a+)+$

// 改善版
a+$

まとめ

正規表現は習得に時間がかかるが、一度身につければテキスト処理の効率が劇的に向上する。

学習のコツ:

  1. 基本構文を覚える(メタ文字、量指定子、文字クラス)
  2. 実際にテスターで試す
  3. 実務で使うパターンから始める
  4. 徐々に高度な機能(先読み、後読みなど)を学ぶ

L-yard Tools の正規表現テスターを活用して、実践的にスキルを磨いていこう。


参考リンク


あわせて読みたい