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
参数是一个数组,则所有模式将被该字符串替换。如果两个pattern
和replacement
参数是数组,每一个pattern
将被替换replacement
对应物。如果replacement
数组中的元素少于数组中的元素,则pattern
任何多余的pattern
s将被空字符串替换。
replacement
可能包含\ n
或$ n
形式的引用,后一种形式是首选形式。每个这样的参考将被第n个括号内的模式所捕获的文本所取代。n可以是0到99,\ 0
或$ 0
是指整个模式匹配的文本。从左向右(从1开始)计算左括号,以获得捕获子模式的编号。要在替换中使用反斜杠,它必须加倍(“\\”
PHP字符串)。
当使用反向引用后跟另一个数字的替换模式(即:在匹配模式之后立即放置文字数字)时,不能使用熟悉的\ 1
符号作为反向引用。例如,\ 11
会混淆preg_replace(),
因为它不知道您是否希望\ 1
反向引用后跟一个文字1
,或\ 11
反向引用后面什么都不是。在这种情况下,解决方案是使用$ {1} 1
。这会创建一个单独的$ 1
反向引用,将1
作为文字。
当使用不赞成使用的e
修饰符时,该函数会跳过替换反向引用的字符串中的
某些字符(即'
,“
,_和NULL),以确保没有反向引用使用单引号或双引号引起的语法错误 ,例如
'
strle
n(\'
$ 1 \'
)+ strle
n(“
$ 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 →