PHP 开发者大会日本 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 条注释

10
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');
?>
7
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']
?>
3
sajina_99 at hotmail dot de
13 年前
由于我必须使用 PHP5.2.X 并需要 preg_filter,所以我编写了一个快速简便的解决方法。

<?php
如果 (!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