如何修复"使用未定义的常量"使用正则表达式的通知?

时间:2014-06-21 12:13:03

标签: php regex

我正在做一些旧项目。某些变量定义不正确,因此我们收到以下错误消息:

  

注意:使用未定义的常量xyz

例如:

$name = $_REQUEST[name];

有一个解决方案:

$name = $_REQUEST['name'];

但这种情况发生在整个项目的许多地方,因此很难找到和替换。

是否有任何正则表达式可用于搜索和替换正确的名称?

我尝试使用以下正则表达式,但它适用于所有情况:

\$[A-Za-z_]\w+\[)(\b[A-Za-z_]\w+\b)(\])

我如何为此任务编写正确的正则表达式?

2 个答案:

答案 0 :(得分:2)

如果[]内没有单引号,则下面的正则表达式会将[]内的文字用单引号括起来,

\[((?!')[^]]*)\]

DEMO

您的PHP代码将是,

<?php
$string = '$name = $_REQUEST[name];';
$pattern = "/\[((?!')[^]]*)\]/i";
$replacement = "['$1']";
echo preg_replace($pattern, $replacement, $string);
?>  

输出:

$name = $_REQUEST['name'];

答案 1 :(得分:0)

在将生产服务器升级为将PHP 7.2用于旧项目之后,我只是出现了一些这样的错误。

这是我写的用于识别未定义的常量错误的正则表达式:

\$[a-zA-Z0-9_]+\[[a-z]+\]

我手动修复了发生的情况,但是替换模式将类似于以下内容:

\$$1['$2']

另外值得注意的是,对于以下示例,PHP不会引发错误(因为它在双引号字符串中):

"... WHERE id = $_POST[id]"