正規表現
Regular Expression / Regex
概要(サマリー)
正規表現とは、文字列の並び方や条件を、専用の記号を使って表すパターン記法のことである。検索・置換・入力チェックなどに使われる。
たとえば「郵便番号は3桁-4桁の数字」「半角英数字だけを許可したい」「この単語をまとめて探したい」といった条件を、短い記号の組み合わせで書ける。メールアドレスの入力チェックなどでよく使われるが、実際の見た目は ^[a-zA-Z0-9]+$ のように呪文に近く、初心者にはかなり読みにくい。そのため、今はAIに「こういう条件の正規表現を書いて」と依頼し、意味を確認しながら使うやり方も現実的である。
詳細解説
正規表現は「文字のパターン」を書くルールである
普通の文字列検索では、「この単語をそのまま探す」といったことはしやすい。
しかし実際には、「数字3桁」「英字が1文字以上」「末尾が .jpg の文字列だけ」など、少し柔軟な条件で探したいことがある。
そんなときに使うのが正規表現である。
正規表現を使うと、文字そのものではなく、文字の並び方のルールを表せる。
たとえば次のような条件を表現できる。
- 数字だけでできている
- 先頭が英字で始まる
- 特定の文字で終わる
- ハイフンを含む郵便番号の形になっている
- メールアドレスらしい形になっている
つまり正規表現は、「文字列そのもの」ではなく「文字列の型やパターン」を扱う仕組みである。
どんな場面で使われるのか
正規表現は、見えないところでかなりよく使われている。
代表的なのは次のような場面である。
入力チェック
フォームに入力された値が条件に合っているかを確認するときに使われる。
たとえば、郵便番号、電話番号、英数字のみのIDなどである。
検索
大量の文章やコードの中から、特定のパターンに合うものだけを探したいときに使われる。
エディタやIDEの検索機能でも、正規表現検索が使えることが多い。
置換
「この形に合う文字列だけまとめて別の形へ変える」といった一括変換にも使われる。
コード整理やテキスト整形でかなり便利である。
データ抽出
ログやCSVのようなテキストから、必要な部分だけ抜き出したいときにも役立つ。
どういう見方をすればよいか
正規表現が怖く見えるのは、普段見慣れない記号が多いからである。
ただし、中身は「文字の条件を短く書いているだけ」と考えると少し理解しやすくなる。
たとえば、次のような意味を持つ記号がある。
^= 先頭$= 末尾.= 多くの場合、改行以外の任意の1文字*= 0回以上+= 1回以上[0-9]= 0から9のどれか1文字[a-z]= 小文字アルファベットのどれか1文字
たとえば、次の正規表現がある。
^[0-9]{3}-[0-9]{4}$
これは、ざっくり言うと「先頭から末尾まで、数字3桁・ハイフン・数字4桁の形で終わる文字列」である。
つまり、日本の郵便番号のような形を判定したいときに使える。
例を分解してみる
上の例を少しずつ見ると、次のようになる。
^
文字列の先頭から始まる[0-9]{3}
数字が3回続く-
ハイフンそのもの[0-9]{4}
数字が4回続く$
そこで文字列が終わる
このように分解すれば、呪文のように見える正規表現も少し読みやすくなる。
ただし、複雑になると一気に難しくなるため、最初から全部を暗記しようとしなくてよい。
ワイルドカードや普通の検索との違い
ここは初心者が混同しやすい。
- 普通の検索
指定した文字をそのまま探す - ワイルドカード
*などでざっくり広く一致させる - 正規表現
文字の並び方や条件まで細かく指定できる
たとえば、「.jpg で終わるファイルを探す」くらいならワイルドカードでも足りることがある。
しかし、「英字2文字 + 数字4桁 + ハイフン任意」のような細かい条件になると、正規表現のほうが向いている。
正規表現のメリット
複雑な条件を短く書ける
長い if 文や手作業のチェックを減らせることがある。
検索や置換が強力になる
大量のテキストやコードをまとめて処理しやすい。
入力チェックを共通化しやすい
同じ形式チェックを何度も使う場面で便利である。
正規表現の注意点
見た目がわかりにくい
短く書ける反面、慣れていないと読みにくい。
あとで自分でも意味が分からなくなることがある。
完璧な判定に向かないこともある
たとえばメールアドレスやURLのように、厳密な仕様がかなり複雑なものは、単純な正規表現だけで完全判定しようとすると難しい。
「それっぽい形の確認」には向いていても、完全保証には向かない場合がある。
複雑にしすぎると保守しにくい
1本で何でも判定しようとすると、呪文が巨大化して読めなくなる。
場合によっては、正規表現を分けたり、別のロジックと組み合わせたりしたほうがよい。
AI時代に正規表現をどう扱うべきか
ここまで見てきたように、初心者が複雑な正規表現を自力で読み書きするのはかなり大変である。
そのため今は、AIに条件を日本語で伝えて、たたき台を作ってもらう使い方がかなり実用的である。
たとえば、次のように聞ける。
- 郵便番号用の正規表現を書いて
- 半角英数字だけを許可する正規表現を書いて
- この正規表現の意味を1つずつ分解して説明して
ただし、AIが出した正規表現をそのまま盲信するのは危険である。
特に、入力チェックやセキュリティに関わる用途では、次の点を確認したい。
- 本当に想定した文字列だけに一致するか
- 想定外の入力を通していないか
- 複雑すぎて保守不能になっていないか
- もっと簡単な方法で済まないか
つまりAIは便利な補助になるが、意味を分解して確認する姿勢は必要である。
より詳しくAIに聞いてみよう
- 正規表現とは何かを、中学生でもわかるように具体例つきで説明してください。
- 正規表現でよく使う記号の意味を、初心者向けに整理してください。
- 郵便番号や半角英数字の入力チェック用の正規表現を、分解しながら説明してください。
- 正規表現とワイルドカード検索の違いを、やさしく教えてください。
- AIに正規表現を書かせるときの注意点を、具体例つきで説明してください。