PHP是一種廣泛使用的開源服務器端腳本語言,被廣泛用于Web開發。在程序設計中經常會遇到貪婪匹配問題,而PHP中有非貪婪匹配的概念。
貪婪匹配是指當正則表達式中存在多個匹配項時,默認使用最長的匹配項進行匹配。例如,正則表達式 /a.+b/ 對字符串 "abacfghbbh" 進行匹配時會匹配到整個字符串,而不是 "ab" 和 "b"。
相反,非貪婪匹配使用最短的匹配項,即在正則表達式后面加上 ? 號,例如 /a.+?b/ 則只會匹配到 "ab"。
//例子1 $str = "acfhgbh"; preg_match("/a.+b/", $str, $matches); echo $matches[0]; //輸出 "acfhgb" //例子2 $str = "acfhgbh"; preg_match("/a.+?b/", $str, $matches); echo $matches[0]; //輸出 "ab"
非貪婪匹配在處理包含關系時比較常用。例如,我們需要匹配 html 代碼中的鏈接,從而獲取鏈接地址。如果使用貪婪匹配,會出現鏈接嵌套在其他標簽中而實現不了目的。使用非貪婪匹配則可解決該問題。
//例子3 $html = "(.*?)<\/a>/i", $html, $matches); echo $matches[1]; //輸出 "http://www.example.com"
除了在正則表達式中使用非貪婪匹配外,PHP中的 explode() 函數和 strstr() 函數也支持使用非貪婪模式。
//例子4 $str = "abcdeefghijkl"; $array = explode("e", $str, 2); //指定限制次數 print_r($array); //輸出 Array ( [0] =>abcde [1] =>efghijkl )
在開發中,我們要根據需求選擇使用貪婪匹配或非貪婪匹配。
總之,非貪婪匹配是在正則表達式中常用的一種技巧。在學習使用 PHP 進行編程時,理解和掌握非貪婪匹配會大大提高我們編寫正則表達式的能力。
上一篇php $