【发布时间】:2019-01-12 21:37:12
【问题描述】:
在 PHP 7.2 中,manual 表示:
不存在的全局常量的不带引号的字符串被带到 成为自己的字符串。此行为用于发出 E_NOTICE,但 现在将发出 E_WARNING。在 PHP 的下一个主要版本中,出现错误 反而会抛出异常。
另外,像 $list[products_name] 这样的代码现在会产生这个警告:
警告:使用未定义的常量 products_name - 假定为“products_name” (这将在 PHP 的未来版本中引发错误)在第 %d 行的 %s 中
我现在已经切换到 PHP 7.2 并获得了我想要搜索和替换的代码,方法是匹配括号内所有未引用的字符串并向它们添加单引号(例如,$list[products_name] 将变为 $list['products_name']),除了都是大写的字符串。我想特别跳过这些的原因是因为很多时候它们确实是常量,我不应该把它们放在引号内。
我是正则表达式的新手,并尝试了几种选择。到目前为止,我已经想出了这个正则表达式:
\$\w+\[([a-zA-Z_]+[\w]+)\]
它适用于我需要的大多数用途,除了它仍然捕获代码块中的所有大写字符串,如下所示:
$options[$list[_option_id]][]=array($list[_value],$list[_value_id]);
$option_names[$list[_option_id1]]=$list[_option];
$product_name=$list[products_name];
$product_name=$list[0];
$product_name=$list[DONTCAPTUREME];
$product_name=$list[CapTureMe];
$product_name=$list[CapTurEME];
如何将其修改为不匹配 DONTCAPTUREME 之类的示例?
谢谢
【问题讨论】: