正規表現とは?いつ使うのかを初心者向けに解説【正規表現入門】
正規表現(Regular Expression)の基本概念、なぜテキスト処理で必要か、どんな場面で使うかを初心者向けにわかりやすく解説します。プログラミング学習の第一歩として正規表現の全体像を掴みましょう。
正規表現(Regular Expression)とは何か
正規表現(せいきひょうげん、英語では Regular Expression、略して regex や regexp)とは、文字列のパターンを記述するためのミニ言語です。「メールアドらしい形」「日付らしい形」「数字だけ」といった条件を、短い記号の並びで表現できます。
たとえば「@マークの前後に英数字がある文字列」を探したいとき、プログラムで1文字ずつ条件分岐を書くのは大変です。正規表現なら [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} のように、パターンを1行で書けます。最初は記号が多くて難しく見えますが、部品ごとに分解して学べば、誰でも読めるようになります。
# イメージ:「cat」という文字列を含む行を探す(多くのツールで共通)
cat
# より厳密に「cat だけの単語」を探す例(後の回で詳しく学びます)
\bcat\b
なぜ正規表現を学ぶのか
現代の開発では、あらゆるデータがテキストとして流れます。Webアプリのログ、CSV、JSON、フォーム入力、設定ファイル、コマンドの出力…。これらから「欲しい行だけ」「エラーコードだけ」「メールアドレスだけ」を取り出す作業は日常です。
正規表現を知っていると、次のような作業が劇的に速くなります。
- ログの絞り込み:エラーレベル ERROR の行だけを抽出する
- フォーム検証:電話番号・郵便番号・パスワード強度をチェックする
- 一括置換:エディタやIDEで、命名規則に合わせて変数名をまとめて直す
- データ整形:不要な空白や記号を削除し、分析用にきれいにする
Python、JavaScript、Java、PHP、Rubyなど、ほぼすべてのプログラミング言語が正規表現を標準またはライブラリでサポートしています。Linuxの grep、エディタの検索、データベースの一部機能でも同じ考え方が使われます。
正規表現が活躍する具体例
Webフォームの入力チェックでは、ユーザーが入力した文字列が期待する形式かを確認します。「半角数字10桁の電話番号」「@を含むメールアドレス」などは、正規表現で表現するのが一般的です。ブラウザの input type="email" も、内部では似たパターン判定を行っています。
ログ解析では、サーバーに毎秒大量の行が記録されます。障害調査のとき、「HTTP 500 が含まれる行」「特定のIPアドレスからのアクセス」だけを抜き出す必要があります。正規表現と grep を組み合わせると、ターミナル上で素早く原因を追えます。
テキストエディタの検索・置換では、VS CodeやVim、Notepad++などが正規表現モードを提供しています。リファクタリングで「変数名の接頭辞を一括変更」するような作業も、パターンを書けば数秒で終わります。
# 日付らしい部分を探すイメージ(YYYY-MM-DD)
\d{4}-\d{2}-\d{2}
正規表現の「方言」について知っておくこと
正規表現には、歴史的にいくつかの方言(フレーバー)があります。POSIX、Perl互換(PCRE)、JavaScript、Pythonの re モジュールなど、細かい挙動が異なることがあります。
初心者がつまずきやすいのは「同じ記号でも環境によって意味が違う」ケースです。たとえば \d(数字1文字)は多くの現代の実装で使えますが、古いツールでは使えないこともあります。このコースでは、まず共通して使える基本を学び、後半で JavaScript や grep など環境別の違いにも触れます。
大切なのは「完璧な1本の正規表現を暗記する」ことではなく、パターンを部品に分解して読む力を身につけることです。文字クラス、量詞、アンカー、グループ——これらの部品の意味がわかれば、どの環境でも応用できます。
正規表現を学ぶ前にあると便利なこと
正規表現は単体の言語ではなく、他のツールの中で使うものです。次のような基礎があると、学習がスムーズです。
- テキストエディタ:検索ボックスで文字列を探した経験
- コマンドライン:LinuxやmacOS、WSLで
grepやファイルを開いた経験 - プログラミングの基本:変数、文字列、条件分岐がわかること
まだプログラミングを始めたばかりでも大丈夫です。このコースは、記号の意味から順に、具体例と失敗例を交えて進めます。わからない記号が出てきたら、オンラインの「正規表現テスター」にパターンと文字列を入力して、マッチする部分を視覚的に確認するのがおすすめです。
よくある誤解と正しい考え方
誤解1:「正規表現は暗記ゲーム」——実務では、よく使うパターンはコピー&調整で十分なことが多いです。自分でゼロから書く前に、信頼できるチートシートやテスターで動作確認しましょう。
誤解2:「複雑なパターンほど優れている」——読みにくい巨大な1行は、バグの温床です。小さなパターンに分ける、コメント(言語によっては可能)を付ける、テストケースを用意するのがプロのやり方です。
誤解3:「すべての文字列処理に正規表現」——HTMLやJSONのパース、複雑な自然言語処理には向きません。構造化データには専用のパーサやライブラリを使うのが正解です。正規表現は行単位・フィールド単位のテキストに向いています。
このコースで学ぶ10ステップ
- 正規表現の概要と使い道(今回)
- リテラルとメタ文字(
.\など) - 文字クラス
[]と否定 - 量詞
*+?{n,m} - アンカー
^$と単語境界 - グループとキャプチャ
- 先読み・後読み(応用)
- JavaScriptでの正規表現
- grep・エディタ検索での活用
- 実践:ログとフォーム検証
各回は前の内容を積み上げる構成です。手を動かしてエディタやブラウザのコンソールで試しながら進めてください。
まとめ:正規表現はテキストの「検索設計図」
正規表現は、文字列のパターンを短く記述するための道具です。ログ解析、フォーム検証、一括置換など、開発のあらゆる場面で登場します。最初は記号が多く感じますが、部品ごとに理解すれば、どの言語・ツールでも応用できる強力なスキルになります。このコースで、基礎から実践まで体系的に学んでいきましょう。
まとめ
正規表現は文字列のパターンを記述するミニ言語で、ログ解析・フォーム検証・検索置換など開発のあちこちで使われます。方言の違いはありますが、文字クラス・量詞・アンカーなどの部品を理解すればどの環境でも応用できます。暗記より「分解して読む力」とテスターでの確認が上達の近道です。
次にやること
次はリテラル(そのままの文字)とメタ文字(. \ * など)の違いを学びます。エスケープのルールを理解すると、記号を文字として扱うかパターンとして扱うかがはっきりします。
よくある質問
正規表現はプログラミング言語ですか?
独立したプログラミング言語ではなく、多くの言語やツールに組み込まれた「パターン記述の記法」です。Pythonのre、JavaScriptのRegExp、grepなどがそれぞれ解釈して実行します。
正規表現を覚えるのにどのくらいかかりますか?
基本的な文字クラスと量詞は数日〜1週間で使えるようになります。実務レベルでは、よく使うパターンをテスターで試しながら3〜4週間続けると自然に身につきます。
初心者はどこから始めるべきですか?
まず「リテラル(普通の文字)」と「.(任意の1文字)」から始め、次に [] 文字クラス、* + 量詞の順がおすすめです。このコースもその順序で解説しています。
正規表現でHTMLをパースしてもいいですか?
一般的には推奨されません。HTMLは入れ子構造が複雑で、正規表現だけでは壊れやすいです。DOMパーサや専用ライブラリを使いましょう。
学習に便利なツールはありますか?
regex101.com や開発者ツールのコンソール、VS Codeの正規表現検索など、パターンと文字列を入力してマッチを可視化できるツールが役立ちます。
次に読むべき記事
同カテゴリ「正規表現」の記事
人気記事
- TS2307: Cannot find module '@components/Widget601' or its corresponding type declarations の原因と解決法
- TS2307: Cannot find module '@components/Widget591' or its corresponding type declarations の原因と解決法
- TS2307: Cannot find module '@components/Widget581' or its corresponding type declarations の原因と解決法
- TS2307: Cannot find module '@components/Widget571' or its corresponding type declarations の原因と解決法
- TS2307: Cannot find module '@components/Widget561' or its corresponding type declarations の原因と解決法
- TS2307: Cannot find module '@components/Widget551' or its corresponding type declarations の原因と解決法
学習ルート
体系的に学びたい方はこちらから。
インフラ・ドキュメントコース →あわせて読みたい
- 実践:ログとフォーム検証|正規表現コース総まとめ【入門】同じ講座の関連回です
- JavaScriptでの正規表現|RegExp・test・match・replace【入門】同じ講座の関連回です
- グループとキャプチャ|正規表現の ( ) と置換【入門】同じ講座の関連回です
- アンカー ^ $ と単語境界|正規表現で位置を指定する【入門】同じ講座の関連回です
- 量詞 * + ? {n,m}|正規表現の繰り返しをマスター【入門】同じ講座の関連回です