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

PHP preg 正則函數詳細筆記:preg_match、貪婪/非貪婪、PREG_SET_ORDER

     編輯:PHP 相關知識

PHP preg 正則函數詳細筆記

1. preg_match 與 preg_match_all 差異

  • preg_match:只匹配第一次,隨即停止。
  • preg_match_all:匹配所有符合項,直到字串結束。
<?php
// 非貪婪模式 /a.+?e/
preg_match("/a.+?e/", "abcdefgabcdefgabcdefg", $out1);
preg_match_all("/a.+?e/", "abcdefgabcdefgabcdefg", $out2);
var_dump($out1); // 單一結果
var_dump($out2); // 三個結果
?>

2. 貪婪 vs 非貪婪模式

  • 貪婪(預設):盡可能匹配最長字串。量詞 *、+、?、{n,}。
  • 非貪婪:量詞後加 ?(如 *?、+?),匹配最短字串。
<?php
$str = "https://www.baidu/.com?url=www.sina.com/";
preg_match("/http:(.*)com/", $str, $m1);   // 貪婪:匹配到最後一個 com
preg_match("/http:(.*?)com/", $str, $m2); // 非貪婪:匹配到第一個 com
var_dump($m1, $m2);
?>

3. preg_match_all 旗標:PREG_PATTERN_ORDER vs PREG_SET_ORDER

  • PREG_PATTERN_ORDER(預設):結果為 $matches[0] 為完整匹配陣列,$matches[1] 為第一個捕獲組陣列...。
  • PREG_SET_ORDER:結果為 $matches[0] 為第一次匹配的所有捕獲組,$matches[1] 為第二次匹配...。
<?php
$html = "start: this is a testend";
preg_match_all("|<[^>]+>(.*)]+>|U", $html, $out1); // PREG_PATTERN_ORDER
preg_match_all("|<[^>]+>(.*)]+>|U", $html, $out2, PREG_SET_ORDER);
var_dump($out1, $out2);
?>

延伸閱讀

  • preg_replace 進階替換技巧
  • PCRE 正則語法完整參考
  • PHP 正則效能優化建議
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved