首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

preg_replace

(PHP 4, PHP 5, PHP 7)

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

描述

代码语言:javascript
复制
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 使用反向引用,后跟数字文字

代码语言:javascript
复制
<?php
$string?=?'April?15,?2003';
$pattern?=?'/(\w+)?(\d+),?(\d+)/i';
$replacement?=?'${1}1,$3';
echo?preg_replace($pattern,?$replacement,?$string);
?>

上面的例子将输出:

代码语言:javascript
复制
April1,2003

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

代码语言:javascript
复制
<?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);
?>

上面的例子将输出:

代码语言:javascript
复制
The bear black slow jumps over the lazy dog.

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

代码语言:javascript
复制
<?php
ksort($patterns);
ksort($replacements);
echo?preg_replace($patterns,?$replacements,?$string);
?>

上面的例子将输出:

代码语言:javascript
复制
The slow black bear jumps over the lazy dog.

示例#3 替换几个值

代码语言:javascript
复制
<?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');
?>

上面的例子将输出:

代码语言:javascript
复制
$startDate = 5/27/1999

例#4 剥去空白

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

代码语言:javascript
复制
<?php
$str?=?'foo???o';
$str?=?preg_replace('/\s\s+/',?'?',?$str);
//?This?will?be?'foo?o'?now
echo?$str;
?>

示例#5 使用参数count

代码语言:javascript
复制
<?php
$count?=?0;

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

上面的例子将输出:

代码语言:javascript
复制
xp***to
3

注意

注意:

?? 当使用具有模式和替换的数组时,键将按照它们在数组中出现的顺序进行处理。 这不一定与数字索引顺序相同。 如果使用索引来确定哪个模式应该由哪个替换替换,则应在调用preg_replace()之前对每个数组执行ksort()。

扩展内容

  • preg_quote() - 引用正则表达式字符
  • preg_filter() - 执行正则表达式搜索并替换
  • preg_match() - 执行正则表达式匹配
  • preg_replace_callback() - 执行正则表达式搜索并使用回调进行替换
  • preg_split() - 用正则表达式分割字符串
  • preg_last_error() - 返回上一次PCRE正则表达式执行的错误代码

← preg_replace_callback

preg_split →

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com