正規表現は最長マッチ
正規表現って最長でマッチする。。。ちょっと不便
そこで、正規表現で最短マッチ
.+?
?
を付記することで最短マッチになる。
または[.*?]
のように、条件に*
を使うことも出来る。
正規表現で最短マッチできたら便利ですよね
最短マッチの例
'[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 を使ってマッチさせてもイイんだけど、最短マッチの方が圧倒的に読みやすいですね。