それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

正規表現の最短マッチを知ってると便利

正規表現は最長マッチ

正規表現って最長でマッチする。。。ちょっと不便

そこで、正規表現で最短マッチ

.+? 

? を付記することで最短マッチになる。

または[.*?]のように、条件に* を使うことも出来る。

正規表現で最短マッチできたら便利ですよね

最短マッチの例

'[2016-09-19][済][TODO]提出資料を作る.txt'.match(/\[(.+?)\]/)
#=> #<MatchData "[2016-09-19]" 1:"2016-09-19">

もし最短マッチしないとどうなるか.

'[2016-09-19][済][TODO]提出資料を作る.txt'.match(/\[(.+)\]/)
#=> #<MatchData "[2016-09-19][済][TODO]" 1:"2016-09-19][済][TODO">

最短マッチをしない場合は、最長マッチになる。。。不便

最短マッチを知らないとnot 地獄

最短マッチを知らなくても、not を使えば、最短マッチを実現することが出来るけど。。。。

'[2016-09-19][済][TODO]提出資料を作る.txt'.match(/\[([^\]]+)\]/)
#=> #<MatchData "[2016-09-19]" 1:"2016-09-19">

not を使ってマッチさせてもイイんだけど、最短マッチの方が圧倒的に読みやすいですね。

参考資料

http://qiita.com/ha_g1/items/d41febac011df4601544

http://d.hatena.ne.jp/cloned/20061110