正規表現、正則表現(英: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上で文字列結合をするアプローチでもいいのだが、その辺りは趣味の問題である。
掲示板
30 ななしのよっしん
2022/05/27(金) 08:40:31 ID: /XuzzeN3hA
大百科の掲示板にNG機能が欲しいという声が多い中、ブラウザの置換アドオンと正規表現を使えば近いことが出来そうな気がするんだけどどう登録すればいいもんだろう?
ソースでは掲示板書き込み単体を表記してるHTMLは
<dt class="st-bbs_reshead">
<a name="【レス番号】" class="resnumhead"></a>
<span class="st-bbs_resNo">【レス番号】</span>
<span class="st-bbs_name">【名前 デフォはななしのよっしん】</span>
<div class="st-bbs_resInfo">
【yyyy】/MM】/【dd】(【E】) 【hh】:【㎜】:【ss】
(省略しています。全て読むにはこのリンクをクリック!)
31 ななしのよっしん
2023/06/03(土) 21:42:41 ID: Wbrv8ZX+a7
ニコニコ専ブラで存在を知って知識ゼロの状態からだと「サルにもわかる正規表現入門」ってサイトが参考になった
1:矢印を使ったコメントは他のコメントへの反応(例「↑それな」「↓だったらお前がつくってみせろよ」)に使われがちなのでこれらをNGにしたい
2:一方で「ご↑は→ん↓」みたいなイントネーションを表現するコメント(これを嫌う人もいるだろうが)は残したい
反応コメントの矢印は文頭につくことが多いので最初に文頭を表す^をつけて
^[←↑↓].*$
で反応コメントだけ非表示にできる
32 ななしのよっしん
2023/06/03(土) 21:44:55 ID: lQzMXowE4D
お、すごいな、ちゃんと勉強して使えるようにしたんだな
最初に入ったSESの会社なんてITエンジニア名乗りながら正規表現を使いこなせない連中がいたからなあ…
提供: 匿名希望一般ニコ民
提供: elevensesmaster
提供: ティチャ
提供: 志塔喜摘
提供: 夕陽
急上昇ワード改
最終更新:2025/04/10(木) 18:00
最終更新:2025/04/10(木) 18:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。