トップページに戻る
次の正規表現パズルへ
前の正規表現パズルへ
2-15 三銃士を検索
正規表現パズル
三銃士を検索する。
三銃士というのは、
アトス
アラミス
ポルトス
のことです
検索前
検索後
対象データ
アトス [皆は一人の為に、一人は皆の為に]
アラミス[皆は一人の為に、一人は皆の為に]
ポルトス[皆は一人の為に、一人は皆の為に]
正規表現
アトス|アラミス|ポルトス
別解1
((ア(ト|ラミ))|ポルト)ス
別解2
(ア(ト|ラミ)|ポルト)ス
解説
こちらを参考にさせていただきました
正木氏は、すごい(名字も、正木で正規表現の正規だし)
別解は、パフォーマンスとしては、
共通文字列を取り出して、
スを共通文字列とすることにより、
BM法による高速化が期待できます
可読性よりも、パフォーマンスが要求される正規表現なら
共通文字列の取り出しを、
考える価値はあるでしょう
共通文字列を取り出すことによる、BM法については、
詳説 正規表現の(日本語版の二版)の
237ページに記述されてますね
なお、正規表現の変形順序は、以下の通り
アトス|アラミス|ポルトス
(アト|アラミ)ス|ポルトス
((アト|アラミ)|ポルト)ス
((ア(ト|ラミ))|ポルト)ス
さらに無駄な括弧を外して、
(ア(ト|ラミ)|ポルト)ス
としてもいいし、
最初から以下の順序で変形してもいいでしょう。
(数学の因数分解で、全体の因数を先に取り出す感覚です。)
アトス|アラミス|ポルトス
(アト|アラミ|ポルト)ス
(ア(ト|ラミ)|ポルト)ス
Boyer-Moore(BM)法