php - preg_replace 带有/e修饰符的代码评估

标签 php preg-replace echo pcre

我正在寻找 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/

相关文章:

php - 如何在表单 POST 或 GET 后保留选择框的选定值

php 计算来自 sql 和数组的数据

php - 如何在 PHP 中从这个组合中删除点

php - Printf() 不如 PHP 中的 echo 可靠?

echo - 回声$ JAVA_HOME不返回jdk位置

c - 如何防止c中转义字符的回显

php - 如何在 zend framework 2 中实现 beberlei doctrine 扩展

php - PHP 的 Preg 替换模式

javascript - 如何使用javascript将p标签替换为br

php - 验证仅包含字母、数字和可选空格的字符串