最短マッチ・貪欲じゃなくする

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

正規表現では、色々な記号が使われますが、それぞれの記号の意味は以下のRubyリファレンスが参考になります。

スポンサーリンク

正規表現 – Rubyリファレンスマニュアル

Rubyの正規表現は、Perlとほとんど同じですので、Perlで正規表現の経験があれば、新たに覚える必要はないです。
個人的に正規表現で忘れやすい点、知らないことに関してのみ、エントリーを書いていますので、随時マニュアルなどを参照お願いします。

繰り返しを表す「*」(0回以上)、「+」(1回以上)を用いた正規表現は、貪欲にマッチしようとします。
貪欲にマッチとは、できるだけ長い文字列を食べてしまおうとする(マッチしようとする)ということです。
これらの繰り返し指定の記号の後に、「?」をつけることで、マッチを貪欲じゃなく、最短にすることができます。

str = "abcabcabc"
 
print /a.*c/ =~ str, " :", $&, "\n"        # 正規表現は貪欲にマッチする
print /a.*?c/ =~ str, " :", $&, "\n"    # ?で最短マッチになる。貪欲じゃなくなる!
 
print /b.+b/ =~ str, " :", $&, "\n"        # 貪欲マッチ
print /b.+?b/ =~ str, " :", $&, "\n"    # 最短マッチ

実行結果。

0 :abcabcabc
0 :abc
1 :bcabcab
1 :bcab
スポンサーリンク
 
スポンサーリンク