正規表現が難しい理由
正規表現(Regex)はまるで「異星の言語」のように、記号の羅列が目を回させます。しかしテキスト処理能力は代替不可能で、メール検証、データ抽出、一括置換が数行の正規表現で数十行のコードに匹敵します。重要なのはよく使うパターンを押さえ、必要な時に調べられるようにすることです。すべてを暗記する必要はありません。
よく使う正規表現チートシート
検証系
| 用途 | パターン |
|---|---|
| メール | ^[\w.-]+@[\w.-]+.\w+$ |
| 携帯電話番号(中国大陸) | ^1[3-9]\d{9}$ |
| URL | ^https?://[\w.-]+(:\d+)?(/.*)?$ |
| 身分証番号(18桁) | ^\d{17}[\dXx]$ |
| IPアドレス | ^(\d{1,3}.){3}\d{1,3}$ |
抽出系
| 用途 | パターン |
|---|---|
| すべての数字を抽出 | \d+ |
| HTMLタグの内容を抽出 | <(tag)>(.*?)</\1> |
| リンクを抽出 | https?://[\w./?=&%-]+ |
| 中国語を抽出 | [\u4e00-\u9fa5]+ |
置換系
| 用途 | 正規 → 置換 |
|---|---|
| 空白行を削除 | 連続する改行+空白 → 単一の改行 |
| 電話番号をマスク | 中間4桁を **** に置換 |
| キャメルケースをスネークケースへ | 大文字の前にアンダースコアを挿入 |
DocsAll 正規表現テストツール
正規表現テストツールでリアルタイムにデバッグ:
- 正規表現テストツールを開く
- 正規表現を入力し、フラグを選択(g グローバル、i 大文字小文字無視、m 複数行)
- テストテキストを貼り付け
- マッチ結果をリアルタイムにハイライト表示
書きながらテストすると、目隠しで書くよりずっと効率的です。正規表現の基礎は正規表現チュートリアルもご覧ください。
よく使うメタ文字の早見表
- . 任意の1文字(改行を除く)
- \d 数字、\w 英数字とアンダースコア、\s 空白
- ^ 行頭、$ 行末
- * 0回以上、+ 1回以上、? 0回または1回
- {n,m} n回以上m回以下
- [] 文字クラス、() グループ、| または
デバッグのコツ
分割してテストする
複雑な正規表現は少しずつ書き、追加するたびにテストすると問題箇所を特定しやすくなります。
非貪欲マッチを活用する
貪欲マッチは一致しすぎるため、非貪欲マッチ(量指定子の後に ? を付ける)は最小限に一致し、内容の抽出でよく使われます。
エスケープに注意
.、*、? などのメタ文字自体にマッチさせるにはバックスラッシュでエスケープします。例えばピリオドにマッチさせるには . を使います。
正規表現への過度な依存を避ける
複雑な HTML/JSON の解析に正規表現を使うとエラーになりやすいです。パーサーを使うべきところではパーサーを使いましょう。正規表現はルールが明確なテキストマッチに向いています。
アドバイス
よく使う正規表現を自分用のチートシートにまとめ、必要な時にコピーして書き換えるだけにしましょう。テストツールでリアルタイムに検証を組み合わせれば、正規表現はそれほど難しくありません。