$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
答案 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
的更多详细信息