我想替换源代码中所有未加引号的数组键:
$array[keyValue]
带引号的数组键:
$array['keyValue']
对于单维数组,此正则表达式允许我执行以下操作:
preg_replace('/\$([a-z-_0-9]+)(\[([a-z][a-zA-Z-_0-9]+)\])+/', '\$$1['$3']', $input_lines);
测试:https://www.phpliveregex.com/p/pXc
请注意,我所有的键都以小写字母开头。
当我有多维数组并且想要更改时,我的问题就来了:
$array[keyValue1][keyValue2]
至:
$array['keyValue1']['keyValue2']
甚至
$array[keyValue1]...[keyValueN]
到
$array['keyValue1']...['keyValueN']
用于较大尺寸的数组。我尝试多次匹配模式都会导致第一个左括号[
与最后一个]
之间的匹配。
编辑:执行此操作的原因是为了避免出现此类错误和通知
E_NOTICE : type 8 -- Use of undefined constant key - assumed 'key' -- at line 2
在我的日志中
答案 0 :(得分:3)
注意:请注意预定义的常量。这不是也不能忽略它们。
您需要使用\G
进行连续比赛。将preg_replace
与以下正则表达式一起使用:
(\$\w+\[|\G(?!\A)\[)([^]['"]+)\]
,然后将以下字符串作为替换字符串:
$1'$2']
PHP代码:
preg_replace('~(\$\w+\[|\G(?!\A)\[)([^][\'"]+)\]~', '$1\'$2\']', $str);
正则表达式细分:
(
开始捕获#1组
\$\w+\[
匹配一个$
,然后匹配一些单词字符,然后匹配一个开括号|
或\G(?!\A)
从上一场比赛结束的地方开始比赛\[
匹配左括号)
捕获#1组结束(
开始捕获#2组
[^]['"]+
匹配[
,]
,'
和"
以外的任何内容)
捕获#2组结束\]
匹配右括号