2017年2月8日 星期三

[regex] (.*?) vs (.*)


https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F


一直看不懂什麼叫貪婪模式@@


後來看到這篇

http://stackoverflow.com/questions/3075130/what-is-the-difference-between-and-regular-expressions

恍然大悟!

regex 的默認都是greedy,意思就是說它會一直往後找,找到最後沒有了再往前回傳最後一次找到的結果。

舉例來說:

像是 '3.*?2' 對上 '3.*2'
input : abc3jikkdf2jasdfj2asdf

'3.*?2' 的結果會是  3jikkdf2,因為它是non greedy,所以一找到就會停下來
'3.*2' 的結果會是  3jikkdf2jasdfj2 ,它會一直找找找找到最後再backtrack回去,所以最後的到比較長的結果



沒有留言:

張貼留言