皆さま、こんにちは。ホンヤク社の成田です。
東京は、夏の始まりを感じるような一週間でした。皆さまいかがお過ごしでしょうか。
今回からは、正規表現の応用的な例をご紹介したいと思います。本日は「*」や「+」と「?」とを組み合わせることでできる「最短一致」の表現について、例を挙げながら説明いたします。
実は、これまでにご紹介した「.*」や「\d+」といった表現は、その条件が当てはまる最長の文字列をヒットさせる性質を持っています。どういうことかと言うと、たとえば
私が「おはよう」と言うと、彼は「こんにちは」と返事した。
という文字列に対して、「」で括った文字列をヒットさせるために『「.*」』(わかりづらいため二重括弧で括りました)という正規表現を適用すると
「おはよう」と言うと、彼は「こんにちは」
の部分がヒットします。これは、最初に出現する『「』を起点として、そこから一番遠い(最長の)『」』を優先的に終点とするという性質によって起こっており、これを「最長一致」と呼びます。
このようなケースで、「おはよう」と「こんにちは」の二つをヒットさせたい場合に、「?」を用いて最短一致の性質を持たせることで、最初に出現する『「』を起点として、そこから一番近い(最短の)『」』を優先的に終点とすることができます。
最短一致の正規表現の書き方は、上記のケースあれば『「.*?」』のように「*」の直後に「?」を挿入するだけです。「+」の場合でも、『「+?」』のように記せば良いです。「?」は、以前にお話しした通り「直前文字の0回か1回の出現」を表す正規表現ですが、「*」や「+」と組み合わさると最短一致を表す性質に変わります。
次回は、この最短一致の具体的な例をご紹介したいと思います。
