PHP Preg_replace()模式不起作用

时间:2017-09-10 05:16:45

标签: php regex preg-replace preg-match

我想使用preg_replace替换文本。但是我的搜索字符串有/它会产生问题。

我该如何解决?

$search='r/trtrt';
echo preg_replace('/\b'.addslashes($search).'\b/', 'ERTY', 'TG FRT');

我正在error preg_replace(): Unknown modifier 'T'

3 个答案:

答案 0 :(得分:3)

使用不同的delimiter并且不要使用addslashes,即转义非正则表达式的特殊字符(或正则表达式和非正则表达式字符的组合,我会说大多数时间不要使用addslashes)。

$search='r/trtrt';
echo preg_replace('~\b'. $search.'\b~', 'ERTY', 'TG FRT');

您可以使用preg_quote作为替代方案。只是更改分隔符是最简单的解决方案。

答案 1 :(得分:2)

使用~作为分隔符:

$search='r/trtrt';
echo preg_replace('~\b'.addslashes($search).'\b~', 'ERTY', 'TG FRT');

我总是使用~,因为它是字符串中使用最少的字符之一,但你可以使用你想要的任何字符,而不需要逃避你的正则表达式字符!

在你的情况下你不需要addslashes()但是如果你有一个更复杂的正则表达式而你想要转义字符,你应该使用preg_quote($search)

答案 2 :(得分:1)

为什么不以它要完成的方式逃避它

$search='r/trtrt';
 echo preg_replace('/\b'.preg_quote($search, '/').'\b/', 'ERTY', 'TG FRT');

http://php.net/manual/en/function.preg-quote.php

  

preg_quote()接受str并在每个前面放一个反斜杠   作为正则表达式语法一部分的字符。这是   如果你有一个运行时字符串,你需要匹配一些   text和字符串可能包含特殊的正则表达式字符

定界符

  

如果指定了可选分隔符,它也将被转义。   这对于转义PCRE所需的分隔符非常有用   功能。 /是最常用的分隔符。

添加斜杠不是此处使用的功能。它不为Regx中的任何特殊字符提供转义。

  

特殊的正则表达式字符是:。 \ + *? [^] $(){   } =! < > | : -

使用正确的函数可以提高代码的可读性,如果在某个稍后的时间点,您或其他编码人员看到~分隔符,他们可能会认为它是个人风格的一部分"或者很少注意。但是,看到输入正确转义将告诉任何有经验的编码人员输入可能包含与正则表达式冲突的字符。

就我个人而言,每当我编写代码时,可读性就位于我的列表顶部。如果你一眼就能理解它,它有什么用处。