我正在做一些旧项目。某些变量定义不正确,因此我们收到以下错误消息:
注意:使用未定义的常量
xyz
例如:
$name = $_REQUEST[name];
有一个解决方案:
$name = $_REQUEST['name'];
但这种情况发生在整个项目的许多地方,因此很难找到和替换。
是否有任何正则表达式可用于搜索和替换正确的名称?
我尝试使用以下正则表达式,但它适用于所有情况:
\$[A-Za-z_]\w+\[)(\b[A-Za-z_]\w+\b)(\])
我如何为此任务编写正确的正则表达式?
答案 0 :(得分:2)
如果[]
内没有单引号,则下面的正则表达式会将[]
内的文字用单引号括起来,
\[((?!')[^]]*)\]
您的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]"