對於那些閱讀非英文手冊並發現範例程式碼返回的結果與文件中不同的使用者
您需要在範例模式中加入修飾符 "u" 才能獲得相同的結果
<?php
$subject = array('1', 'а', '2', 'б', '3', 'А', 'Б', '4');
// 已新增 "u"
$pattern = array('/\d/u', '/[а-я]/u', '/[1а]/u');
$replace = array('А:$0', 'Б:$0', 'В:$0');
?>
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
preg_filter — 執行正規表示式搜尋和取代
$pattern
,$replacement
,$subject
,$limit
= -1,&$count
= null
preg_filter() 與 preg_replace() 的功能相同,差別在於它只會傳回有匹配到的 (可能經過轉換的) 主題。關於此函式運作方式的詳細資訊,請閱讀 preg_replace() 的說明文件。
參數說明請參考 preg_replace() 的說明文件。
如果傳入的正規表達式模式無法編譯成有效的正規表達式,則會發出 E_WARNING
警告。
範例 #1 比較 preg_filter() 和 preg_replace() 的範例
<?php
$subject = array('1', 'a', '2', 'b', '3', 'A', 'B', '4');
$pattern = array('/\d/', '/[a-z]/', '/[1a]/');
$replace = array('A:$0', 'B:$0', 'C:$0');
echo "preg_filter 返回\n";
print_r(preg_filter($pattern, $replace, $subject));
echo "preg_replace 返回\n";
print_r(preg_replace($pattern, $replace, $subject));
?>
以上範例會輸出
preg_filter returns Array ( [0] => A:C:1 [1] => B:C:a [2] => A:2 [3] => B:b [4] => A:3 [7] => A:4 ) preg_replace returns Array ( [0] => A:C:1 [1] => B:C:a [2] => A:2 [3] => B:b [4] => A:3 [5] => A [6] => B [7] => A:4 )
對於那些閱讀非英文手冊並發現範例程式碼返回的結果與文件中不同的使用者
您需要在範例模式中加入修飾符 "u" 才能獲得相同的結果
<?php
$subject = array('1', 'а', '2', 'б', '3', 'А', 'Б', '4');
// 已新增 "u"
$pattern = array('/\d/u', '/[а-я]/u', '/[1а]/u');
$replace = array('А:$0', 'Б:$0', 'В:$0');
?>
如果您不想真正替換匹配項,只想篩選陣列中的匹配項,請將替換參數設為 '$0'。
<?php
$subject = array('1', 'a', '2', 'b', '3', 'A', 'B', '4');
$result = preg_filter('/\d/', '$0', $subject); // ['1','2','3','4']
?>
由於我必須使用 PHP5.2.X 且需要 preg_filter,所以我寫了一個快速但不夠完善的替代方案。
<?php
if (!function_exists('preg_filter')) {
function preg_filter($pattern, $replace, $subject, $limit = -1 , &$count = null) {
if(!is_array($subject)) {
$noArray = 1 ;
$subject = array($subject);
}
$preg = preg_replace($pattern, $replace, $subject, $limit, &$count);
$diff = array_diff($preg, $subject);
if($noArray == 1) $diff = implode($diff) ;
return $diff ;
}
}
?>