[PHP] preg_match 的貪婪和不貪婪比對 greedy/non-greedy match
在php preg_match中預設是採用貪婪比對,太貪婪反而不符合需要,因此得採用「非貪婪比對」,只要在modifier 中加上"U"即可,如下範例:
$str= "A running <b>dog</b> rams a walking <b>pig</b>."; // Greedy matches ... default matches 貪婪比對,取出最大字串 $IsMatch= preg_match('/<b>(.*)<\/b>/', $str, $match); if( $IsMatch ){ print $match[1] . "\n" ; } // Nongreedy matches, use U modifier 非貪比對,取出最頭及最小字串 $IsMatch= preg_match('/<b>(.*)<\/b>/U', $str, $match); if( $IsMatch ){ print $match[1] . "\n" ; }
執行結果:
dog</b> rams a walking <b>pig
dog
參考資料
[1] PHPcook http://docstore.mik.ua/orelly/webprog/pcook/ch13_05.htm
[2] Regex modifiers http://php.net/manual/en/reference.pcre.pattern.modifiers.php
原文 2013-09-25 01:11:01