Preg Replace - Модификатор E - PullRequest
0 голосов
/ 17 мая 2011
$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 ]

1 голос
/ 17 мая 2011

Второй параметр 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.)

0 голосов
/ 17 мая 2011

Во-первых, вам нужно правильно убрать скобки:

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

Во-вторых, при использовании модификатора e ваша замена все равно должна быть строкой. Однако это строка, которая оценивается как код PHP после замены обратных ссылок. Попробуйте следующее:

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

Ознакомьтесь с документами для получения более подробной информации о модификаторе e

...