因为PHP版本的问题,我需要将我的代码从$array[stringindex]
更改为$array['stringindex'];
所以我想要使用正则表达式来查找所有文本,并进行替换。如何查找所有类似于$array[stringindex]
的字符串?
因为PHP版本的问题,我需要将我的代码从$array[stringindex]
更改为$array['stringindex'];
所以我想要使用正则表达式来查找所有文本,并进行替换。如何查找所有类似于$array[stringindex]
的字符串?
$re = "/(\\$[[:alpha:]][[:alnum:]]+\\[)([[:alpha:]][[:alnum:]]+)(\\])/";
$str = "here is \$array[stringindex] but not \$array['stringindex'] nor \$3array[stringindex] nor \$array[4stringindex]";
$subst = "$1'$2'$3";
$result = preg_replace($re, $subst, $str);
$foo[42]
这样的内容将被转换为$foo['42']
,这可能不是理想的。
请注意,这里的所有解决方案都无法正确处理每种情况。
查看Sublime Text正则表达式帮助后,似乎只需将(\\$[[:alpha:]][[:alnum:]]+\\[)([[:alpha:]][[:alnum:]]+)(\\])
粘贴到搜索框中,然后将$1'$2'$3
粘贴到替换字段中即可。
这取决于您想要使用的工具来进行替换。例如,使用sed,它可能是这样的:
sed "s/\(\$array\)\[\([^]]*\)\]/\1['\2']/g"
sed -i "s/(\$[^[]*[)([^]]*)]/\1'\2']/g" file
解释:
sed "s/pattern/replace/g"
是一个 sed
命令,它搜索 pattern 并将其替换为 replace。选项 g
表示每行替换多次。(\$[^[]*[)([^]]*)]
这个模式由两个组成(括号之间)。第一个是一个美元符号,后跟一系列非 [
字符。然后是一个开放的方括号,后跟一系列非闭合方括号,然后是一个闭合方括号。\1'\2']
替换字符串:\1
意味着插入第一个捕获组(对于 \2
类似)。基本上我们用引号包裹了 \2
(这就是你想要的)。-i
表示更改应应用于提供的原始文件。有关更多信息,请参见 man sed
。
这可以与 find 命令结合使用,如下所示:
find . -name '*.php' -exec sed -i "s/(\$[^[]*[)([^]]*)]/\1'\2']/g" '{}' \;
php
文件应用sed命令。