PHP

preg_replace

preg_replace

(PHP 4, PHP 5, PHP 7)

preg_replace - 执行正则表达式搜索并替换

描述

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

搜索主题匹配模式,并用替换替换它们。

参数

pattern

要搜索的模式。它可以是字符串,也可以是字符串数组。

几个PCRE修饰符也可用。

replacement

用字符串替换的字符串或数组。如果此参数是一个字符串,并且该pattern参数是一个数组,则所有模式将被该字符串替换。如果两个patternreplacement参数是数组,每一个pattern将被替换replacement对应物。如果replacement数组中的元素少于数组中的元素,则pattern任何多余的patterns将被空字符串替换。

replacement可能包含\ n $ n 形式的引用,后一种形式是首选形式。每个这样的参考将被第n个括号内的模式所捕获的文本所取代。n可以是0到99,\ 0$ 0是指整个模式匹配的文本。从左向右(从1开始)计算左括号,以获得捕获子模式的编号。要在替换中使用反斜杠,它必须加倍(“\\” PHP字符串)。

当使用反向引用后跟另一个数字的替换模式(即:在匹配模式之后立即放置文字数字)时,不能使用熟悉的\ 1符号作为反向引用。例如,\ 11会混淆preg_replace(),因为它不知道您是否希望\ 1反向引用后跟一个文字1,或\ 11反向引用后面什么都不是。在这种情况下,解决方案是使用$ {1} 1。这会创建一个单独的$ 1反向引用,将1作为文字。

当使用不赞成使用的e修饰符时,该函数会跳过替换反向引用的字符串中的某些字符(即'_和NULL),以确保没有反向引用使用单引号或双引号引起的语法错误 ,例如 'strlen(\'$ 1 \')+ strlen($ 2”)'_)。确保您知道PHP的字符串语法,以准确知道解释字符串的外观。

subject

用字符串搜索和替换的字符串或数组。

如果subject是一个数组,则搜索和替换将在每个主题的条目上执行,并且返回值也是一个数组。

limit

每个主题字符串中每种模式的最大可能替代数。 默认为-1(没有限制)。

count

如果指定,则此变量将填充完成的替换次数。

返回值

preg_replace()返回一个数组,如果subject参数是一个数组,否则返回一个字符串。

如果找到匹配项,则返回新的主题,否则主题将返回不变或发生错误时返回NULL。

错误/异常

从PHP 5.5.0开始,在传递“\ e”修饰符时会发出E_DEPRECATED级别的错误。 从PHP 7.0.0开始,E_WARNING在这种情况下发出,“\ e”修饰符不起作用。

更新日志

描述
7.0.0/ e修饰符的支持已被删除。请改用preg_replace_callback()。
5.5.0/ e修饰符已弃用。请改用preg_replace_callback()。有关安全风险的其他信息,请参阅PREG_REPLACE_EVAL文档。
5.1.0增加了count参数

例子

示例#1 使用反向引用,后跟数字文字

<?php $string = 'April 15, 2003'; $pattern = '/(\w+) (\d+), (\d+)/i'; $replacement = '${1}1,$3'; echo preg_replace($pattern, $replacement, $string ?>

上面的例子将输出:

April1,2003

示例#2 使用带有preg_replace()的索引数组

<?php $string = 'The quick brown fox jumps over the lazy dog.'; $patterns = array( $patterns[0] = '/quick/'; $patterns[1] = '/brown/'; $patterns[2] = '/fox/'; $replacements = array( $replacements[2] = 'bear'; $replacements[1] = 'black'; $replacements[0] = 'slow'; echo preg_replace($patterns, $replacements, $string ?>

上面的例子将输出:

The bear black slow jumps over the lazy dog.

通过拼凑模式和替换,我们就能得到我们想要的。

<?php ksort($patterns ksort($replacements echo preg_replace($patterns, $replacements, $string ?>

上面的例子将输出:

The slow black bear jumps over the lazy dog.

示例#3 替换几个值

<?php $patterns = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/',                    '/^\s*{(\w+)}\s*=/' $replace = array ('\3/\4/\1\2', '$\1 =' echo preg_replace($patterns, $replace, '{startDate} = 1999-5-27' ?>

上面的例子将输出:

$startDate = 5/27/1999

例#4 剥去空白

本示例从字符串中去除多余的空白。

<?php $str = 'foo   o'; $str = preg_replace('/\s\s+/', ' ', $str // This will be 'foo o' now echo $str; ?>

示例#5 使用参数count

<?php $count = 0; echo preg_replace(array('/\d/', '/\s/'), '*', 'xp 4 to', -1 , $count echo $count; //3 ?>

上面的例子将输出:

xp***to 3

注意

注意:

扩展内容

  • preg_quote() - 引用正则表达式字符

  • preg_filter() - 执行正则表达式搜索并替换

  • preg_match() - 执行正则表达式匹配

  • preg_replace_callback() - 执行正则表达式搜索并使用回调进行替换

  • preg_split() - 用正则表达式分割字符串

  • preg_last_error() - 返回上一次PCRE正则表达式执行的错误代码

← preg_replace_callback

preg_split →