2017-09-10 45 views
0

我想使用preg_replace替换文本。但是我的搜索字符串有一个/所以它使问题。PHP Preg_replace()模式不起作用

我该如何解决?

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

我越来越error preg_replace(): Unknown modifier 'T'

回答

3

使用不同的delimiter并且不使用addslashes,即逃亡非正则表达式的特殊字符(或正则表达式和非正则表达式字符的组合,我会说大部分的时间不使用addslashes)。

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

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

2

使用~作为分隔符:

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

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

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

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并提出一个反斜杠每 字符前面是部分正则表达式语法。这是 有用的,如果你有,你需要在一些 文本匹配运行时字符串,如果指定了可选分隔符的字符串可能包含的特殊字符

分隔符

,它也将逃脱。 这对于转义PCRE 函数所需的分隔符非常有用。 /是最常用的分隔符。

添加斜线不是在这里使用的函数。它不提供Regx中任何特殊字符的转义。

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

使用适当的功能提升代码的可读性,如果在之后的某个时间点,您或其他编码器看到~分隔符,他们可能只是想的个人“风格”的一部分,或者支付它很少关注。但是,看到输入正确转义会告诉任何有经验的编码人员输入可能包含与正则表达式冲突的字符。

就我个人而言,每当我编写代码时,可读性就在我的列表顶部。如果你一眼就看不清楚,它有什么好处。

+1

所以它,我是一个合理的人,更新。 – ArtisticPhoenix