摘要:[Reg].*與.*?
.*某某一大堆字串:表示.*在內以及某某一大堆字串(除了換行符號之外),會找到最後一次符合,俗稱貪婪法(greedy)
.*?某某一大堆字串:表示.*在內以及某某一大堆字串(除了換行符號之外), 找到第一次符合就停了,俗稱非貪婪法(no greedy),例如:
假設要檢查以下字串:天氣很好,你好嗎,我是JOHN, 你好嗎
如果REG設定為:
.*你好嗎
只會有一個match結果:因為他會找到最後一次符合
天氣很好,你好嗎,我是JOHN, 你好嗎
如果REG設定為:
.*?你好嗎
就會有以下兩個MATCH結果:因為找到第一次符合時,就會回傳一次結果
1.你好嗎
2.,我是JOHN, 你好嗎
不過比較常見的REG寫法是:(.*?)你好嗎
因為加了左右括弧的話,還會有GROUP的概念,比較容易比對字串
用中文解釋的話,.*?某某文字 就是只讓後面跟隨的"某某文字"只出現一次,不會重複
類似的道理:也可以用來解釋 前面接著一堆文字.*?
某某一大堆文字.*?:表示某某一大堆文字只會出現一次
例如:如果reg設定為 你好嗎.*?
結果你會得到:獨立兩個的 你好嗎
1.你好嗎
2.你好嗎
例如:如果reg設定為 你好嗎.*
結果就會是一個:重複出現你好嗎的結果
你好嗎,我是JOHN, 你好嗎
Differences between (.*) and (.*?) [duplicate]