2017-09-10 53 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