首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 正則表達式貪婪與非貪婪模式實戰解析

     編輯:PHP 綜合知識

貪婪模式預設行為

正則量詞 *、+、?、{n,m} 預設為貪婪模式:盡可能匹配最長字串。

<?php
$str = "https://www.baidu/.com?url=www.sina.com/";
preg_match("/http:(.*)com/", $str, $matches);
print_r($matches);
/* 結果:
Array (
    [0] => https://www.baidu/.com?url=www.sina.com
    [1] => //www.baidu/.com?url=www.sina.
)
*/

.* 貪婪吞噬至最後一個 com,導致匹配過長。

非貪婪模式:量詞後加 ?

在量詞後添加 ? 即切換為非貪婪(懶惰)模式:匹配最短滿足條件的字串。

<?php
$str = "https://www.baidu/.com?url=www.sina.com/";
preg_match("/http:(.*?)com/", $str, $matches); // 注意 .*? 
print_r($matches);
/* 結果:
Array (
    [0] => https://www.baidu/.com
    [1] => //www.baidu/.
)
*/

常見非貪婪量詞對照表

貪婪非貪婪說明
**?零次或多次
++?一次或多次
???零次或一次
{n,m}{n,m}?n 到 m 次

實戰建議

  • 解析 HTML/JSON 等結構化文字時,優先使用非貪婪 避免跨標籤匹配
  • 效能考量:非貪婪需回溯,極端情況下較慢;可用排除字元類別 [^"]* 替代 .*? 提升效能
  • 除錯技巧:使用 preg_match_all() 觀察所有匹配結果,理解量詞行為

掌握貪婪與非貪婪的切換,是編寫精準高效正則表達式的核心技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved