読者です 読者をやめる 読者になる 読者になる

正規表現(3)

その他 その他-正規表現について
『 .* 』「任意の文字」が「0回以上繰り返される」

前回出てきた.と、* + ?は、組み合わせて使用することが多いメタ文字です。

.*


この2文字で、なんでもいい1文字(.)が、0回以上繰り返される(*)ことを表します。
つまり、何らかの文字が1つもないか、1つ以上(いくつでも)ある場合に一致します。

.+


この2文字で、なんでもいい1文字(.)が、1回以上繰り返される(+)ことを表します。
つまり、何らかの文字が1つ以上(いくつでも)ある場合に一致します。

.?


この2文字で、なんでもいい1文字(.)が、0〜1回ある(?)ことを表します。
つまり、何らかの文字が1つもないか、1つだけある場合に一致します。

(例1)
f:id:four_or_three:20160608172236j:plain:w250

.*で、何らかの文字が、あっても、なくても、いくつあっても一致しますので、"さいとうどうさん"だけが一致の対象外となります。

(例2)
f:id:four_or_three:20160608172217j:plain:w250

文字ならどこまででも一致してしまう表現ですが、.は改行には一致しませんので、改行部分で一致は一旦終了します。
次の行に移って一致検索は再開され、一致する部分が検出されます。

最長一致と最短一致

上に出てきた.* .+ .?は、最長一致の表現です。下の例を見てください。

(例3)
f:id:four_or_three:20160608205451j:plain:w250

入力するテキストには、「う」が2箇所あります。最長一致、最短一致というのは、どちらの「う」まで検出するかということです。

.+は最長一致の表現ですので、2つ目(最後)の「う」まで一致し、検出されるのは"さいとうどう"となります。

対して、最短一致の表現は下のようになります。

.*?
.+?
.??


最長一致の表現の後ろに?を付けることで、最短一致の表現に変わります。

(例4)
f:id:four_or_three:20160608205550j:plain:w250

.+?は最短一致の表現ですので、1つ目(最初)の「う」まで一致し、検出されるのは"さいとう"となります。

?は「直前の文字が0〜1回あることを表すメタ文字」でもありますのでややこしいですが、ここは『?の位置』によって、「0〜1回あることを表す?」なのか「最短一致のための?」なのか判断するしかありません。

第4回に続きます。

広告を非表示にする