[Reg].*與.*?

  • 703
  • 0
  • 2015-04-17

摘要:[Reg].*與.*?

.*某某一大堆字串:表示.*在內以及某某一大堆字串(除了換行符號之外),會找到最後一次符合,俗稱貪婪法(greedy)

.*?某某一大堆字串:表示.*在內以及某某一大堆字串(除了換行符號之外), 找到第一次符合就停了,俗稱非貪婪法(no greedy),例如:

假設要檢查以下字串:天氣很好,你好嗎,我是JOHN, 你好嗎

如果REG設定為:

.*你好嗎

只會有一個match結果:因為他會找到最後一次符合
天氣很好,你好嗎,我是JOHN, 你好嗎

如果REG設定為:

.*?你好嗎

就會有以下兩個MATCH結果:因為找到第一次符合時,就會回傳一次結果

1.你好嗎
2.,我是JOHN, 你好嗎
不過比較常見的REG寫法是:(.*?)你好嗎
因為加了左右括弧的話,還會有GROUP的概念,比較容易比對字串
 
用中文解釋的話,.*?某某文字  就是只讓後面跟隨的"某某文字"只出現一次,不會重複
 
類似的道理:也可以用來解釋 前面接著一堆文字.*?
某某一大堆文字.*?:表示某某一大堆文字只會出現一次
例如:如果reg設定為  你好嗎.*?
結果你會得到:獨立兩個的  你好嗎
1.你好嗎
2.你好嗎
例如:如果reg設定為 你好嗎.*
結果就會是一個:重複出現你好嗎的結果
你好嗎,我是JOHN, 你好嗎
 
Differences between (.*) and (.*?) [duplicate]