テキストの検索や置換を行う際に非常に強力なツールとなるのが正規表現(Regular Expression)です。
「正規表現って難しそう」「記号の意味がわからない」と感じている方も多いのではないでしょうか。
この記事では正規表現の基本的な意味と仕組み、よく使われる記号と書き方をわかりやすく解説していきます。
プログラミング初学者からスキルアップを目指すエンジニアまで、幅広い方にぜひ参考にしていただきたい内容です。
正規表現とは文字列のパターンを記号で表現してマッチングや検索を行う仕組みである
それではまず、正規表現の基本的な定義と概要について解説していきます。
正規表現とは、文字列のパターンを特殊な記号(メタ文字)を使って表現し、そのパターンに一致する文字列を検索・抽出・置換するための仕組みです。
たとえば「数字が3桁続く文字列」や「@マークを含むメールアドレス形式の文字列」といったパターンを1つの正規表現で表現し、大量のテキストから一致する部分を効率よく見つけることができます。
正規表現は特定のプログラミング言語専用の技術ではなく、Python・JavaScript・Java・PHP・Perlなど主要な言語のほぼ全てで利用でき、grep・sed・awkなどのUnixコマンドでも広く活用されています。
正規表現の基本的な書き方を一度習得すれば、さまざまな言語やツールで応用できるため、習得の費用対効果が非常に高いスキルです。
正規表現はRegEx(Regular Expression)とも略されており、テキスト処理・バリデーション・ログ解析・データクレンジングなど幅広い場面で活用されています。
正規表現の基本的な記号(メタ文字)と意味
続いては、正規表現でよく使われる基本的な記号(メタ文字)とその意味について確認していきます。
文字クラスと特殊文字
| 記号 | 意味 | 例 |
|---|---|---|
| . | 任意の1文字(改行を除く) | a.c → abc、axc、a1cなどにマッチ |
| \d | 数字1文字([0-9]と同義) | \d\d\d → 123、456などにマッチ |
| \w | 英数字またはアンダースコア1文字 | \w+ → hello、abc123などにマッチ |
| \s | 空白文字1文字(スペース・タブ・改行) | hello\sworld → hello worldにマッチ |
| [abc] | a・b・cのいずれか1文字 | [aeiou] → 母音1文字にマッチ |
| [^abc] | a・b・c以外の1文字 | [^0-9] → 数字以外にマッチ |
量詞(繰り返し)の記号
| 記号 | 意味 | 例 |
|---|---|---|
| * | 直前の文字が0回以上繰り返す | ab* → a・ab・abbなどにマッチ |
| + | 直前の文字が1回以上繰り返す | ab+ → ab・abb・abbbなどにマッチ |
| ? | 直前の文字が0回または1回 | colou?r → color・colourにマッチ |
| {n} | 直前の文字がちょうどn回 | \d{3} → 3桁の数字にマッチ |
| {n,m} | 直前の文字がn〜m回 | \d{3,5} → 3〜5桁の数字にマッチ |
アンカーとグループの使い方
続いては、文字列の位置を指定するアンカーとグループ化について確認していきます。
アンカー記号
アンカーとは文字列内の特定の位置を指定するメタ文字です。
「^」は文字列または行の先頭を意味し、「$」は文字列または行の末尾を意味します。
たとえば「^\d{3}-\d{4}$」は「3桁の数字-4桁の数字」という形式の文字列全体にマッチするパターンです。
グループとキャプチャ
丸括弧「()」を使うとパターンをグループ化でき、グループ全体に量詞を適用したり、マッチした部分を後で参照(キャプチャ)したりできます。
正規表現のグループ使用例
「(ab)+」:abが1回以上繰り返す文字列(ab・abab・abababなど)にマッチ
「(\d{4})-(\d{2})-(\d{2})」:日付形式(例:2024-04-01)にマッチし、年・月・日それぞれをグループでキャプチャ
「(?:abc)」:非キャプチャグループ(グループ化のみ行いキャプチャしない)
正規表現の実際の活用場面
続いては、正規表現が実際にどのような場面で活用されるかについて確認していきます。
入力値のバリデーション
メールアドレス・電話番号・郵便番号・パスワードなどのフォーム入力値のバリデーションに正規表現が広く活用されています。
たとえばメールアドレスの簡易バリデーションには「^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$」のようなパターンが使われます。
ログファイルの解析
サーバーのアクセスログやエラーログから特定のパターンの行を抽出する場合に正規表現が威力を発揮します。
grepコマンドと組み合わせることで大量のログから必要な情報を瞬時に抽出でき、障害調査や性能分析に活用できます。
まとめ
正規表現は文字列のパターンをメタ文字で表現し、検索・抽出・置換・バリデーションを効率的に行うための強力な仕組みです。
ドット・文字クラス・量詞・アンカー・グループという基本要素を組み合わせることで、複雑な文字列パターンを表現できます。
プログラミングのほぼ全ての言語とUnixコマンドで利用できる汎用的なスキルであるため、一度習得することで様々な場面で大きな恩恵が得られるでしょう。
まずは基本的なメタ文字から少しずつ覚えて、実際のコードや検索で使ってみてください。