我得到了以下情況:非貪婪通配符「忽略」
...
preg_match('/#(.+?):(.+?)#/im','partA#partB#partC:partD#partE#partF',$matches);
...
執行$比賽後成爲
Array
(
[0] => #partB#partC:partD#
[1] => partB#partC
[2] => partD
)
豈不是正常的$matches[1]
成爲partC
如果我使用非貪婪通配符?
?我錯過了什麼嗎?
我設法通過使用'/#([^#]+?):([^#]+?)#/im'
作爲模式來解決這個問題,但一個相關的解釋對於清除雲是很好的。
感謝。
實際上,你可以使用''/#([^#:] +)([^#] +)#/「'。重點是* lazy *量詞不保證最短匹配,並且正則表達式引擎(默認)從左到右處理字符串。一旦找到有效的符號,就會從最左邊的位置到右邊嘗試其餘的模式。所以,'partB#partC'對'。+?'可以。 –
要理解,正則表達式引擎從左到右搜索字符串,並嘗試在字符串中的每個位置成功。 –
我在你的正則表達式'#'中看到':'到'#'。與'abc'匹配############################################# ################################:#'def'。你看到的是'#:#'。原因在於你想看到的是人性。 – sln