正規表現(regular expression)
文字の並びの形を記号で表す書き方。入力が決めた形になっているかを調べるのに使う。
もう少し詳しい説明
正規表現は、文字の並びの形を記号で表す書き方です。
基本の記号
| 記号 | 意味 | 例 |
|---|---|---|
. | 任意の1文字 | a.c は abc、axc に合う |
[ ] | 中のどれか1文字 | [abc] は a、b、c のどれか |
[0-9] | 0から9の数字1文字 | 範囲は - で書く |
[^ ] | 中のもの以外の1文字 | [^0-9] は数字以外 |
* | 直前の形の0回以上の繰返し | ab* は a、ab、abb に合う |
+ | 直前の形の1回以上の繰返し | ab+ は ab、abb に合う(a には合わない) |
? | 直前の形が0回または1回 | ab? は a、ab に合う |
{n} | 直前の形のちょうどn回 | [0-9]{4} は数字4文字 |
{m,n} | 直前の形のm回以上n回以下 | [0-9]{2,4} は数字2〜4文字 |
| | どちらか | abc|xyz は abc か xyz |
( ) | まとめる | (ab)+ は ab、abab に合う |
^ | 文字列の先頭 | ^abc は abc で始まる |
$ | 文字列の末尾 | abc$ は abc で終わる |
* と + の違い
ここが最も問われるところです。
| 記号 | 0回を許すか |
|---|---|
* | 許す(無くてもよい) |
+ | 許さない(1回以上必要) |
[0-9]* は空文字にも合います。[0-9]+ は、数字が1文字以上必要です。
入力チェックで * を使うと、空の入力が通ります。 必須の項目には + か {n,} を使います。
記号そのものを表したいとき
. や + は、正規表現の中で特別な意味を持ちます。文字としての + を表すには、前に \ を付けます。
| 書き方 | 意味 |
|---|---|
+ | 直前の形の1回以上の繰返し |
\+ | 文字としてのプラス記号 |
. | 任意の1文字 |
\. | 文字としてのピリオド |
この \ をエスケープ文字と呼びます。
国番号付きの電話番号のように、記号を含む形を書くときに必要になります。
\+[0-9]{1,3}-[0-9]{2,4}-[0-9]{4}
先頭の \+ は、文字としての + です。これを + と書くと、「直前の形の1回以上」という意味になり、意図が変わります。
書き方の例
| 確かめたいもの | 正規表現の例 |
|---|---|
| 数字だけ(1文字以上) | ^[0-9]+$ |
| 郵便番号(3桁-4桁) | ^[0-9]{3}-[0-9]{4}$ |
| 半角英数字の4〜12文字 | ^[0-9A-Za-z]{4,12}$ |
| 先頭が大文字のアルファベット | ^[A-Z] |
^ と $ で囲むところが要点です。 囲まないと、一部にその形が含まれていれば合ってしまいます。
| 書き方 | 「abc123def」との判定 |
|---|---|
[0-9]+ | 合う(123の部分がある) |
^[0-9]+$ | 合わない(全体が数字ではない) |
気を付けるところ
| 心配 | 中身 |
|---|---|
| 書き方が処理系で少し違う | 使える記号や書き方に差がある |
| 複雑にすると読めない | 長い正規表現は、後から直せなくなる |
| 処理に時間がかかる形がある | 繰返しが入れ子になった形で、極端に遅くなる入力がある |
| これだけでは守りきれない | 形が正しい入力でも、使い方が誤っていれば攻撃になる |
最後の点が大事なところです。 SQLインジェクションの根本的な対策はプレースホルダで、入力の形を正規表現で確かめることは補助にあたります。
選ばせる形にできないか
正規表現を書く前に、入力そのものを避けられないかを見ます。
| 項目 | 入力させずに済む形 |
|---|---|
| 都道府県 | ドロップダウンリスト |
| 日付 | 日付を選ぶ部品 |
| 区分 | ラジオボタン |
選ばせれば、想定外の値が入りません(入力の画面部品のページで扱っています)。
試験ではこう出る
科目A(旧・午前)では、与えられた正規表現に合う文字列を選ぶ形で出ます。{n} の回数と、* と + の違いを見ます。
午後や応用情報(情報システム開発)では、正規表現の空欄を埋める形で出ます。問題文に「数字3桁」「国番号を含む場合もある」と書かれるので、その条件を記号に直します。
記号を文字として扱う必要があるかを確かめてください。 + を含む形では、エスケープが答えの分かれ目になります。
関連する用語
- オートマトン
- 状態の移り変わりで文字列を受け付ける仕組み。正規表現と対応する
- BNF
- 文法を書き表す別の記法
- 入力の画面部品(ラジオボタン・チェックボックスなど)
- 選ばせる形にすれば、入力チェックが要らなくなる
- SQLインジェクション
- 入力を使う側の攻撃。正規表現だけでは防ぎきれない
ミニクイズ
正規表現 `[0-9]{3}-[0-9]{4}` に一致する文字列はどれか。
正解は 2番:123-4567
`[0-9]` は0から9までの数字1文字を表し、`{3}` は直前の形が3回続くことを表します。つまり数字3文字、ハイフン、数字4文字という並びです。123-4567はこの形に合います。12-3456は前が2文字、1234-567は前が4文字で後ろが3文字なので合いません。abc-defgは数字ではないので合いません。
この分野をまとめて解く → アルゴリズムとプログラミングのミニテスト(全44問)
最終更新:2026-11-09