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
)

参见

添加笔记

用户贡献笔记 6 个笔记

forsoap at gmail dot com
7 年前
对于那些没有用英语阅读手册的人,并且发现示例代码的返回值与文档中的返回值不一致

您需要在示例模式中添加修饰符“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
6 年前
如果您不想实际替换匹配项,只需将数组过滤到它们,并将替换参数设置为 '$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
12 年前
由于我必须使用 PHP 5.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 ;

}

}
?>
MrBertie
13 年前
另一种过滤数组并简单地返回匹配项的方法:preg_grep!
fgmhhfg at gmail dot com
10 年前
对于 php 5.5.3 版本,示例如下
数组
(
[0] => A:1
[1] => B:a
...
)
匿名
10 年前
对于 php 5.5.3 版本,示例将变为
数组
(
[0]=>A:1
[1]=>B:a
...
)
To Top