Preg_replace - E修饰符

时间:2011-05-17 01:45:11

标签: php mysql function preg-replace

$strpost_a = preg_replace("/\[CallName]([^]]+)\[\/CallName\]/e", getInfo('\\1',"fullname"), $strpost_a);

我总是得到这个回报:

Parse error: syntax error, unexpected T_STRING in C:\wamp\www\-site\files\index\stream.php(88) : regexp code on line 1
Fatal error: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Failed evaluating code: James -LastName Removed- in C:\wamp\www\-site-\files\index\stream.php on line 88

2 个答案:

答案 0 :(得分:1)

preg_replace的第二个参数必须始终为字符串。使用/e标志不会改变它。第二个参数应该是一个字符串包含代码:

$strpost_a = preg_replace(
                 "/\[CallName]([^]]+)\[\/CallName\]/e",
                 'getInfo("\\1","fullname")',
                 $strpost_a
             );

字符串'getInfo("\\1","fullname")'然后进行评估。如果您不在此处将其括在引号中,则preg_replace不会执行,而是事先执行。这就是你收到错误信息的原因。

(有时更适合使用preg_replace_callback,但在您的情况下可能需要特定的getInfo_fullname。)

答案 1 :(得分:0)

首先,您需要正确地转义括号:

"/\[CallName\]([^]]+)\[\/CallName\]/e"

其次,使用e修饰符时,替换仍然需要是一个字符串。但是,在替换反向引用之后,它是一个评估的字符串作为PHP代码。请尝试以下方法:

"getInfo('\\1', 'fullname')"

查看文档以获取有关e modifier

的更多详细信息