我正在寻找 eval() 的替代方法来执行字符串变量中包含的代码,并注意到 preg_replace
带有 /e
修饰符。
但是,代码的计算非常奇怪。
例如,echo()
在 php 5.3.6 中导致错误:
<?php
$code = 'echo( \'Hello, world!\'.PHP_EOL)';
preg_replace('/(.*)/e', $code, '' );
?>
错误信息:
Parse error: syntax error, unexpected T_ECHO in /Users/.../test.php(4) : regexp code on line
Fatal error: preg_replace(): Failed evaluating code:
echo( 'Hello, world!'.PHP_EOL) in /Users/.../test.php on line 4
当 print()
工作并输出 Hello, world! 时:
<?php
$code = 'print( \'Hello, world!\'.PHP_EOL)';
preg_replace('/(.*)/e', $code, '' );
?>
此外,似乎在几行代码中,只有第一行被执行:
<?php
$t=1;
$code = '$t++;$t++;';
preg_replace('/(.*)/e', $code, '' );
echo $t;
?>
输出 2,而不是 3。
问题:preg_replace()
中 PCRE 中的代码评估是否在某处记录?
在 php.net 上找不到
最佳答案
preg_replace /e
eval 不计算语句,而只是一个表达式。
print()
是一个表达式。
echo ...;
不是。
同样,任何可以后跟分号的内容。
参见 http://www.php.net/manual/en/language.expressions.php以获得粗略的概述。
关于php - preg_replace 带有/e修饰符的代码评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7931672/