PHP 正则表达式函数

PHP preg_filter() 函数执行正则表达式搜索和替换。此函数类似于 preg_replace() ,不同之处在于它仅返回存在匹配的(可能已转换的)主题。

语法

preg_filter(pattern, replacement, subject, limit, count) 

参数

mode必需。 指定要搜索的模式。它可以是字符串,也可以是带有字符串的数组。
replacement必需。 指定要替换的字符串或包含字符串的数组。它的替换按以下方式完成:
  • 如果replacement参数是一个字符串并且pattern参数是一个数组,那么所有模式都将被该字符串替换。
  • 如果patternreplacement参数都是数组,则每个模式都将被替换对应项替换。
  • 如果replacement数组中的元素少于pattern数组中的元素,任何多余的模式都将被空字符串替换。
替换字符串可能包含 \n 或 $n 形式的反向引用,其中 n 是模式中组的索引。在返回的字符串中,\n 和 $n 的实例将替换为与该组匹配的子字符串,或者如果使用 \0 或 $0,则替换为整个表达式。 n 可以是 0 到 99。可以使用 {} 创建后跟另一个数字的反向引用。例如 - $1 创建一个隔离的 $2 反向引用和 1 作为文字。
subject必需。 指定要执行替换的字符串或包含字符串的数组。如果subject是一个数组,则对数组的每个元素进行替换,并返回替换后的数组。
limit可选。 指定每个subject 字符串中每个模式的最大可能替换数。默认值为 -1(无限制)。
count可选。 如果指定,此变量将包含完成的替换次数。

返回值

如果满足,则返回一个数组subject 参数是一个数组,或者是一个字符串。如果未找到匹配项或发生错误,则当 subject 为数组时返回空数组,否则返回 null。

示例:使用后向引用后跟数字文字

下面的示例说明了如何使用反向引用后跟数字文字。

<?php
$string = 'May 25, 2005';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '${1}01, $3';
echo preg_replace($pattern, $replacement, $string);
?> 

上述代码的输出将是:

May01, 2005 

示例:使用mode和replacement作为数组

在下面的示例中,使用此函数时将mode和replacement用作数组。

<?php
$string = 'The quick brown fox jumps over the lazy dog.';

$pattern = array('/quick/', '/brown/', '/fox/');
$replacement = array('slow', 'black', 'wolf');

echo preg_filter($pattern, $replacement, $string);
?> 

上述代码的输出将是:

The slow black wolf jumps over the lazy dog. 

示例:使用 count 参数

下面的示例展示了如何使用此函数的 count 参数。

<?php
$count = 0;

$string = "May 1, 2015";

echo preg_replace(array('/\d/', '/\s/'), '*', 
                  $string, -1 , $count)."\n";
echo "Number of replacements: $count"; 
?> 

上面的输出代码为:

May**,*****
Number of replacements: 7 

示例:比较 preg_filter() 与 preg_replace()

下面的示例说明了 preg_filter() 之间的差异和 preg_replace() 函数。

<?php
$subject = array('1', 'p', '2', 'q', '3', 'P', 'Q', '4'); 
$pattern = array('/\d/', '/[a-z]/', '/[1p]/'); 
$replace = array('P:$0', 'Q:$0', 'R:$0'); 

echo "preg_filter returns\n";
print_r(preg_filter($pattern, $replace, $subject)); 

echo "preg_replace returns\n";
print_r(preg_replace($pattern, $replace, $subject)); 
?> 

上述代码的输出将是:

preg_filter returns
Array
(
    [0] => P:R:1
    [1] => Q:R:p
    [2] => P:2
    [3] => Q:q
    [4] => P:3
    [7] => P:4
)
preg_replace returns
Array
(
    [0] => P:R:1
    [1] => Q:R:p
    [2] => P:2
    [3] => Q:q
    [4] => P:3
    [5] => P
    [6] => Q
    [7] => P:4
)