正規表現(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