2017-08-31 44 views
1

我需要刪除從源數據庫使用正則表達式拉出的字符串中的一些奇怪的字符,因爲這些字符可以位於字符串中的任何地方,可以有點不同。 這裏是我的代碼現在:PHP - 正則表達式替換拋出一個錯誤(preg_replace)

$str = "LIVR DEC 20 23 $é**é$01$"; 
$result = preg_replace("/\$[^ ]+\$/", "", $str); 

phpliveregex.com測試它,它工作正常,但是當我運行的代碼(使用PHP 5.4),我得到以下錯誤:

PHP Notice: Undefined variable: é 

和$結果包含原始字符串。爲什麼會拋出這個錯誤?

+2

使用單引號字符串文字來避免字符串插值。與正則表達式一樣,使用單引號。 –

+0

謝謝,用正則表達式中的單引號替換雙引號做到了。 – BronanyX

回答

1

您需要在單引號字符串文字中定義$str和正則表達式。此外,由於您使用Unicode字符串的工作,你也應該使用u修改:

$str = 'LIVR DEC 20 23 $é**é$01$'; 
$result = preg_replace('/\$[^ ]+\$/u', "", $str); 
echo $result; // => LIVR DEC 20 23 

PHP demo

否則,當PHP引擎看到"$é"時,它想插入它,但無法找到具有該名稱的變量。

正則表達式需要單引號因爲"/\$[^ ]+\$/"等於​​其中$是串錨端,並且不能有一個字符串內的兩個不同的結束字符串的位置。

或者,如果你需要使用字符串iterpolation並使用雙引號的字符串常量,逃避$來表示字符串字面$,並與\\\逃脫$正則表達式中,三反斜槓(一個逃脫$爲PHP發動機和\\形式的文字\,使得對正則表達式的特殊字符轉義符):

$str = "LIVR DEC 20 23 \$é**é$01\$"; 
$result = preg_replace("/\\\$[^ ]+\\\$/u", "", $str); 
echo $result; // => LIVR DEC 20 23 

another PHP demo