正規表現の基本と書き方|よく使うパターン一覧
正規表現のメタ文字、量指定子、よく使うパターン(メールアドレス・電話番号・郵便番号など)を解説します。
正規表現とは
正規表現(Regular Expression)とは、文字列のパターンを特殊な記法で表現するための仕組みです。テキストの検索・置換・入力値の検証(バリデーション)など、幅広い場面で使われています。JavaScript、Python、Java、Rubyなど主要なプログラミング言語のほぼ全てで利用可能です。
メタ文字一覧
正規表現で特別な意味を持つ文字を「メタ文字」と呼びます。以下がよく使われるメタ文字の一覧です。
| メタ文字 | 意味 | 例 |
|---|---|---|
| . | 改行を除く任意の1文字 | a.c → abc, a1c |
| \d | 半角数字1文字([0-9]と同等) | \d\d → 42, 09 |
| \w | 半角英数字とアンダースコア([A-Za-z0-9_]) | \w+ → hello_1 |
| \s | 空白文字(スペース・タブ・改行) | \s+ → 連続する空白 |
| ^ | 文字列・行の先頭 | ^Hello → 先頭のHello |
| $ | 文字列・行の末尾 | end$ → 末尾のend |
| * | 直前の要素の0回以上の繰り返し | ab*c → ac, abc, abbc |
| + | 直前の要素の1回以上の繰り返し | ab+c → abc, abbc |
| ? | 直前の要素の0回または1回 | colou?r → color, colour |
| [...] | 括弧内のいずれか1文字 | [aeiou] → 母音1文字 |
| [^...] | 括弧内以外の1文字 | [^0-9] → 数字以外 |
| (...) | グループ化 | (abc)+ → abc, abcabc |
| | | 選択(OR) | cat|dog → catまたはdog |
| \ | エスケープ | \. → ドット文字そのもの |
※大文字版(\D, \W, \S)はそれぞれ小文字版の否定(数字以外、英数字以外、空白以外)を表します。
量指定子(繰り返し回数の指定)
量指定子を使うと、直前の要素を何回繰り返すかを指定できます。
| 量指定子 | 意味 | 例 |
|---|---|---|
| {n} | ちょうどn回 | \d{4} → 4桁の数字 |
| {n,} | n回以上 | \d{2,} → 2桁以上の数字 |
| {n,m} | n回以上m回以下 | \d{2,4} → 2〜4桁の数字 |
| * | 0回以上({0,}と同等) | a* → 空文字, a, aa... |
| + | 1回以上({1,}と同等) | a+ → a, aa, aaa... |
| ? | 0回または1回({0,1}と同等) | a? → 空文字またはa |
貪欲と非貪欲
量指定子はデフォルトで「貪欲(greedy)」に動作し、できるだけ多くの文字にマッチしようとします。量指定子の後に?を付けると「非貪欲(lazy)」になり、できるだけ少ない文字にマッチします。
<.+> → 「<b>太字</b>」全体にマッチ(貪欲)
<.+?> → 「<b>」と「</b>」に個別にマッチ(非貪欲)
よく使うパターン一覧
実務でよく使われる正規表現パターンの一覧です。そのままコピーして利用できます。
| 用途 | 正規表現パターン |
|---|---|
| メールアドレス | ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ |
| 携帯電話番号 | ^0[789]0-\d{4}-\d{4}$ |
| 固定電話番号 | ^0\d{1,4}-\d{1,4}-\d{4}$ |
| 郵便番号 | ^\d{3}-?\d{4}$ |
| URL | ^https?://[^\s]+$ |
| 半角数字のみ | ^\d+$ |
| 全角カタカナのみ | ^[ァ-ヴー]+$ |
| 日付(YYYY-MM-DD) | ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$ |
※メールアドレスやURLの完全な検証は正規表現だけでは難しいため、簡易的なチェック用途として使用してください。日付パターンは形式のみのチェックで、2月30日のような存在しない日付は検出できません。
先読みと後読み
先読み(Lookahead)と後読み(Lookbehind)は、文字列を消費せずに条件を確認する機能です。
| 種類 | 構文 | 例 |
|---|---|---|
| 肯定先読み | X(?=Y) | \d+(?=円) → 「100円」の100 |
| 否定先読み | X(?!Y) | (?!\d)\w+ → 英字で始まる単語 |
| 肯定後読み | (?<=Y)X | (?<=\$)\d+ → 「$50」の50 |
| 否定後読み | (?<!Y)X | (?<!\$)\d+ → 「50個」の50 |
フラグ(検索オプション)
フラグはパターンの後ろに付けて検索の挙動を制御するオプションです。JavaScriptでは/パターン/フラグの形式で記述します。
| フラグ | 名前 | 意味 |
|---|---|---|
| g | global | 文字列内の全ての一致を検索する |
| i | case-insensitive | 大文字・小文字を区別しない |
| m | multiline | ^と$が各行の先頭・末尾にマッチする |
| s | dotAll | .(ドット)が改行文字にもマッチする |