「なんとなく動くけど理解していない」を卒業するための、実務目線の学び方まとめです。
正規表現でつまずく人の大半は、覚える量が多すぎて挫折しているのではなく、「何ができる道具なのか」を掴む前に記号の暗記から入ってしまっているのが原因です。実務で使う機能は判定・抽出・置換の3つしかなく、最初に覚える記号も3種類で足ります。あとは実際の文字列に当てながら書き足していけば、数日で「読める」段階には届きます。
逆に、独学だけでは埋めにくいのが「実務の設計にどう組み込むか」の部分です。この記事では、その境目がどこにあるかまで整理します。
正規表現と聞くと難しそうに見えますが、実務でやっていることは大きく分けて「①文字列が条件に合っているか判定する(バリデーション)」「②文字列の中から欲しい部分だけ取り出す(抽出)」「③文字列の一部を別の文字列に置き換える(置換)」の3つだけです。電話番号の形式チェック、ログファイルからエラー行だけ抜き出す、CSVの表記ゆれを一括置換する——どれもこの3パターンの組み合わせでできています。
この3分類が効いてくるのは、調べ物をするときです。「正規表現 書き方」で検索すると膨大な記号表が出てきて途方に暮れますが、「いま自分は判定がしたいのか、抽出がしたいのか」を先に決めておけば、読むべき箇所は一気に絞れます。判定なら文字列全体が条件に合うかを見る書き方、抽出ならグループで囲んで取り出す書き方、というふうに、必要な道具が変わるためです。
\d が数字、\w が英数字とアンダースコア、\s が空白です。「ここには数字が入る」と書けるようになるだけで、書ける表現が一気に増えます。* が0個以上、+ が1個以上、? が0個か1個、{3} がちょうど3個、{2,4} が2〜4個です。郵便番号なら \d{3}-\d{4} と書けます。( と ) で囲んだ部分を「ひとかたまり」として扱います。抽出のときは、取り出したい部分をこれで囲みます。この3種類だけで、実務で書く正規表現の大半は組み立てられます。先読み・後読みや条件分岐といった高度な構文は、必要になった時点で調べれば十分です。
最初から全部を覚えようとすると、ほぼ確実に息切れします。
.* は「できるだけ長く」マッチしようとします。意図せず範囲が広がりすぎる場合は .*?(非貪欲)を試すと解決することが多いです。HTMLタグを抜き出そうとして1行まるごと巻き込んでしまうのは、この典型例です。. や ( など、正規表現で特別な意味を持つ記号をそのまま探したい場合は \. のようにエスケープが必要です。. は「任意の1文字」を意味するので、エスケープを忘れると意図せず何にでもマッチします。ドメイン名やファイル名を扱うときに事故が起きやすい箇所です。いずれも「実際に書いて、マッチ結果を目で確認する」のが一番の近道です。こでっとの正規表現テストなら、パターンを入力するとマッチ箇所がその場でハイライトされるので、上記のようなつまずきに気づきやすくなります。頭の中で追うのをやめて、目で見て確かめるだけで学習速度は大きく変わります。
フォーム入力のチェック。郵便番号・電話番号・全角半角の混在といった、形式が決まっている入力の検証です。ここは正規表現がそのまま仕事になる領域で、覚えた翌日から使えます。
ログからの絞り込み。エラー行だけを抜き出す、特定の時間帯だけを取り出す、といった作業です。ログは量が多く手作業では追えないため、投資対効果がもっとも大きい使い道です。
データの表記ゆれ修正。CSVやスプレッドシートで「株式会社」と「(株)」が混在している、全角スペースと半角スペースが混ざっている、といった状態を一括で揃える作業です。エディタの置換機能で正規表現を有効にするだけで実行できます。
正規表現の書き方そのものは数日〜数週間で慣れますが、「フォームのバリデーション設計」「ログ監視の仕組み」「API入力のサニタイズ」といった実務の文脈に組み込むには、周辺知識(HTTP、認証、サーバーの基礎など)もセットで理解しておくと応用が効きます。認証まわりを扱うなら、JWTデコードでトークンの中身を確認する作業も合わせて慣れておくと良いでしょう。
ここが独学の限界が出やすい部分でもあります。
書き方は調べれば出てきますが、「どこまで厳しく検証すべきか」「どの層で弾くべきか」といった判断は、設計の文脈を知らないと決められないためです。
独学で十分な人も多い一方、「我流のクセがついた」「実務に近い課題で練習したい」という場合は、カリキュラムに沿って学べるプログラミングスクールを使うのも一つの手です。判断の目安としては、正規表現そのものが目的なら独学で足り、Webアプリの設計まで含めて仕事にしたいなら体系的に学ぶ価値がある、と考えると整理しやすくなります。
まずは「文字クラス(\d \w \s)」「量指定子(* + ? {n,m})」「グループ(())」の3つだけ覚え、実際のテキストに当てながら覚えるのが近道です。こでっとの正規表現テストのようなツールで、書いたパターンがその場でハイライトされるのを見ながら試すと定着しやすくなります。記号表を上から順に暗記する進め方は、挫折しやすいのでおすすめしません。
正規表現そのものは独学でも十分身につきます。ただし「実務でどう設計に組み込むか」「バリデーションやログ解析の文脈でどう使うか」まで含めて体系的に学びたい場合は、プログラミングスクールでカリキュラムに沿って学ぶ方が遠回りを避けられます。正規表現だけが目的ならスクールは過剰投資になりますので、目的の広さで判断してください。
直接の関係はありませんが、どちらも「文字列を構造的に扱う」実務スキルという点で共通します。フォーム入力のバリデーションに正規表現を、認証トークンの中身確認にJWTデコードを使う、といった形で併用する場面がよくあります。
動作を確認してからにしてください。ネット上のパターンは書かれた当時の言語・エンジンを前提にしていることが多く、そのままでは動かない場合があります。また、意図より広くマッチしてしまうパターンをバリデーションに使うと、本来通すべき入力を弾いたり、逆に不正な入力を通したりする原因になります。必ず自分のデータで試してから採用してください。