検索・置換を爆速化させる正規表現 Part 1

PC

「正規表現」(regular expression、regex)という言葉はプログラマー以外の方にはあまり馴染みがないと思いますが、簡単にいうと「検索パターンを定義する一連の文字」です。
検索や置換の対象を正規表現でまとめて抽出し、短時間で処理することができます。

正規表現とは

たとえば、正規表現で「Aで始まってZで終わる3文字以上の文字列」を表すと、a.+zと記述することができます。

a.+zを分解すると、
a...a から始まる(注:行頭ではありません)
.(ドット)...任意の一文字(なんでもいいので一文字)
+...直前の文字を1個以上繰り返し
z...z で終わる(注:行末ではありません)
という意味になります。

下の例では、a.+zを検索し、表示されている文字列のうち、a.+zにマッチする文字列がハイライト表示(黄色の部分)されています。

 


(秀丸エディタにて実行)

つまり、a.+zという正規表現は、このパターンにマッチする無数の文字列を、ひとつの文字列で表現しているということができます。

a.+zという正規表現は、AとZは行頭と行末でなくてもマッチしますので、行頭をA、行尾がZとするには ^a.+z$として検索します。
^ は行頭、 $ は行末)




正規表現を使えるアプリケーション

テキストエディターや検索アプリケーション、ファイル名変更アプリケーションなどの多くは正規表現を使うことができます。

 

正規表現を使う上での注意点

メタ文字

正規表現には「メタ文字」という、あらかじめ役割が決められた文字があります。
メタ文字の例:
  . ^ $ | \ ? * + { } [ ] ( ) 

これらの文字を検索したい場合はそのままでは検索できませんので、メタ文字の前に「 ¥ 」(半角)を付けてエスケープ(無効化)します。

はフォントによってはバックスラッシュ()で表示されますが、役割は同じです。
を半角文字で記載すると区別できなくなるので、上の行では全角で記載しています)

正規表現ライブラリ(エンジン)

アプリケーションによって正規表現の仕様が異なりますので、正しくマッチしない場合は仕様に合わせて記述する必要があります。
アプリケーションによっては正規表現ライブラリ(エンジン)を切り替えられるものもあります。

EmEditor : Boost.Regex / Onigmo
秀丸エディタ : HmJre.dll
Mery : Onigmo(鬼雲)

 



正規表現はプログラマー的な考え方に慣れていない方には使いこなすのがやや難しい面がありますが、ひとつひとつ手作業で文字列を変更して時間がかかっているような場合、正規表現で一気に処理できるか検討してみましょう。

ネットで検索すればサンプルがたくさん見つかるので、最初はそれをひな形にして目的に合うように変更しながら使ってみるといいでしょう。

アプリケーションによっては下のように使われているメタ文字やその意味などが表示されるものもあります。

 

なお、文字列の一部を「 ? 」や「 * (アスタリスク)」で置き換えて検索する「ワイルドカード」は正規表現とは別物ですが、混同して説明されている場合がありますので注意が必要です。

 

コメント