『詳説 正規表現』を読んで学んだことと感想

この記事の目的

詳説 正規表現 第3版

詳説 正規表現 第3版

 

正規表現とは

後で紹介する記事の中で、ソニックガーデンの伊藤さんがわかりやすく表現されていたので引用します。

パターンを指定して、文字列を効率よく検索・置換するためのミニ言語

ちょっと具体例を出してみます。

下記のような文章があったとします。

 

Windows8をWINDOWS10にアップデートする。

Windows10をWINDOWS8にダウングレードする。

W10は W8よりも使い易い。

 

表記がWindowsだったりWINDOWSだったりWだけだったりバラバラなのでどれかに揃えたいですよね(そうでないって人もここは揃えたいということにしておいてください)。

まずパターンを検索ダイアログに入力します。

パターンとは以下のような文字列を言います。

 

W(indows|INDOWS) ?(8|10)

 

|(パイプ)やカッコ、?はメタ文字と呼ばれるものです。

これで検索をかけると下記の赤字の斜体部分にマッチします。

 

Windows8WINDOWS10にアップデートする。

Windows10WINDOWS8にダウングレードする。

W10W8よりも使い易い。

  

ここで置換ダイアログに下記のように入力して置換していきます。

 

Windows$2

 

すると下記のように全てをWindows表記に揃えることができます。

 

Windows8をWindows10にアップデートする。

Windows10をWindows8にダウングレードする。

Windows10は Windows8よりも使い易い。

 

まだ文章が短いから効果がわかりにくいかもしれませんが、もっと長い文章になってくるといちいち手作業で一つ一つ探して修正するのは面倒ですよね。

そんな時に正規表現を知っていると非常に便利です。

学んだことと感想

NFAエンジンの挙動

書籍第4章『正規表現のメカニズム』より引用。

NFAエンジンは、部分式や要素を順番に見ていき、同等の可能性を持つ2つのオプションの中でどちらかを選ばなければならなくなると、片方を選んだ上で、後で必要になったときにそこに戻れるように、もう片方も覚えておく。

オプションの間で道を選ばなければならない状況としては、量指定子(もう1つ余分にマッチすべきかどうか)と選択(どちらの選択肢を先に試し、どちらの選択肢を後に残すか)が考えられる。

どのコースを選んだとしても、それが成功して正規表現の残りの部分も成功したら、マッチは終了する。しかし、正規表現の残りの部分で不成功が起きると、正規表現エンジンは最初に選択を行ったところまでバックトラックし、別のコースに進んでマッチの試行を継続する。NFAは、こうして正規表現から作られるすべての順列を試してみる(少なくとも、マッチが見つかるまで必要な限り)。

この書籍を読んで一番、ためになったのがこのDFAエンジンの挙動。

今までなんとなくで使っていたメタ文字、特に量指定子( * 、 + 、 ? )や選択( | )を使った場合にどのようにマッチするのかがよくわかった。

他の正規表現の正しい書き方や効率のいい書き方よりも、ここを理解しておかないと、本当に正規表現を理解したとは言えないと思った。

プログラマーの方へ

正規表現は知っていると非常に便利です。

知っているとテキストの検索や置換の効率が非常に上がります。

使うのは主にプログラマーですが、個人的には非プログラマーも知っておいた方がいい、知っておいて損はないと思っています。

まずは以下の記事を読んでその便利さを是非体感してみてください。

qiita.com

ちなみに使用するテキストエディタは、OSがWindowsの方にはサクラエディタまたはAtomを、Macの方にはAtomをお勧めします。

sakura-editor.sourceforge.net

blog.codecamp.jp

最後に

何かご意見・ご感想あればコメントください。