2017-08-31 63 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