PHP Conference Japan 2024

preg_filter

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

preg_filter執行正規表示式搜尋和取代

說明

preg_filter(
    字串|陣列 $pattern,
    字串|陣列 $replacement,
    字串|陣列 $subject,
    整數 $limit = -1,
    整數 &$count = null
): 字串|陣列|null

preg_filter()preg_replace() 的功能相同,差別在於它只會傳回有匹配到的 (可能經過轉換的) 主題。關於此函式運作方式的詳細資訊,請閱讀 preg_replace() 的說明文件。

參數

參數說明請參考 preg_replace() 的說明文件。

傳回值

如果 subject 參數是 陣列,則傳回一個 陣列;否則,傳回一個 字串

如果沒有找到匹配項或發生錯誤,當 subject陣列 時,會傳回一個空的 陣列;否則傳回 null

錯誤/例外

如果傳入的正規表達式模式無法編譯成有效的正規表達式,則會發出 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
)

另請參閱

新增註解

使用者貢獻的註解 3 則註解

forsoap at gmail dot com
8 年前
對於那些閱讀非英文手冊並發現範例程式碼返回的結果與文件中不同的使用者

您需要在範例模式中加入修飾符 "u" 才能獲得相同的結果

<?php
$subject
= array('1', 'а', '2', 'б', '3', 'А', 'Б', '4');
// 已新增 "u"
$pattern = array('/\d/u', '/[а-я]/u', '/[1а]/u');
$replace = array('А:$0', 'Б:$0', 'В:$0');
?>
bienvenunet at yahoo dot com
7 年前
如果您不想真正替換匹配項,只想篩選陣列中的匹配項,請將替換參數設為 '$0'。

<?php
$subject
= array('1', 'a', '2', 'b', '3', 'A', 'B', '4');
$result = preg_filter('/\d/', '$0', $subject); // ['1','2','3','4']
?>
sajina_99 at hotmail dot de
13 年前
由於我必須使用 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 ;

}

}
?>
To Top