正規表現、正則表現(英:Regular Expression)とは、文字列の集合を表すための表現法である。形式言語理論の分野では正則表現、電算機上での文字列処理では正規表現と呼ばれる事が多い。
正規表現を用いると、一定の規則に従った文字列の集合を一つの文字列で表現することができる。例えば、「Aから始まりZで終わる、アルファベットからなる10文字の文字列」の集合は、 A[a-zA-Z]{8}Z という風に表現できる。これを検索条件として指定すれば、ワイルドカードを使用するよりも詳細な検索が行える。
正規表現は文字列検索をするのに大変便利なツールだが、言語間・環境間の方言が非常に多いので、利用する際は注意が必要である。多くの言語・環境に搭載されている正規表現はPerl互換だが、特定の文字クラスが存在しなかったり、メタ文字の意味が違ったりしていることがあるのが事態を厄介にしている。なお、一部の記法は本来の正規表現の範囲から外れていることがある。
モデルケースとして、「好きなアニメのキャラクターへの投票をコメント欄で受け付ける」というものを考える。この時、ユーザーは思い思いのキャラクター名をコメントしていくわけだが、そこは人間が手打ちしたものなので、若干の表記ブレが混じってしまう。例えば、以下は全て同じキャラクターへの投票である。
これを普通に数えようとすると、一度各表記ごとに集計し、各表記ごとの投票数を合計する、というアプローチを取る。
が、これは非常に面倒くさい。可能であればメジャーな表記ブレの集計については一発でまとめてしまいたい。そこで使うのが正規表現である。
((キュ|きゅ)[ウゥうぅ](べえ|ベエ)|QB)
これで大まかには表記ブレを拾うことができる。誤字脱字などについては拾いきれないが、大した数ではないだろうから、後で適宜対応すればよい。もし意外と数が多いのなら、正規表現を少しいじってあげればよい。
なお、うまくマッチする正規表現は上記の例以外にもいくらでも考えられる。よりスマートな表現がないか考えてほしい。
泥臭い仕事をするシステムエンジニアにありがちなケースを挙げる。プログラムの中で用いる大量のエラーメッセージの定義が、以下のような表でまとめられている。
| 通し番号 | ID | メッセージ |
|---|---|---|
| 1 | ERR_NANTOKA | hoge error |
| 2 | ERR_KANTOKA | piyo error |
| 3 | ERR_UNTARA | huga error |
| 4 | ERR_KANTARA | foo error |
| 5 | ERR_KAKUKAKU | bar error |
| 6 | ERR_SHIKAZIKA | baz error |
このような内容が数百項目あるのだが、これを全てプログラムの定数値に直さなければならない。しかし、数百項目を手作業で変換するのは面倒だし、何より絶対にどこかで間違いが発生する。そこで、正規表現を使って一括で置換するわけである。
置換文字列: public static final String \1 = "\2"
表の内容をテキストエディタに貼り付け、上記の置換をかけてやると一発で変換が終了する。Excel上で文字列結合をするアプローチでもいいのだが、その辺りは趣味の問題である。
- 正規表現を視覚化するサイト
- 本物の正規表現使いの話急上昇ワード改
最終更新:2025/12/13(土) 13:00
最終更新:2025/12/13(土) 13:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。