Regex sed-或用于正则表达式文本替换的其他工具

Regex sed-或用于正则表达式文本替换的其他工具,regex,sed,replace,Regex,Sed,Replace,我需要将所有$arr[key]替换为$arr['key'],而不是$arr[$key]或$arr[CONST]或已重写为$arr['key'] 最终,$arr[key]与{$arr['key']} 谢谢 您可以尝试以下方法: perl -pe 's/(\$\w+\[\s*)(?![A-Z\d]+\b)(\w+)(\s*])/$1\'$2\'$3/g' file.php 例如: echo $arr[foo] $arr['ok'] $arr[3] $arr[CAPS] $arr[$var] $ar

我需要将所有
$arr[key]
替换为
$arr['key']
,而不是
$arr[$key]
$arr[CONST]
或已重写为
$arr['key']

最终,
$arr[key]
{$arr['key']}


谢谢

您可以尝试以下方法:

perl -pe 's/(\$\w+\[\s*)(?![A-Z\d]+\b)(\w+)(\s*])/$1\'$2\'$3/g' file.php
例如:

echo $arr[foo] $arr['ok'] $arr[3] $arr[CAPS] $arr[$var] $arr[ bar ] | perl -pe "s/(\$\w+\[\s*)(?![A-Z\d]+\b)(\w+)(\s*])/$1'$2'$3/g"
$arr['foo'] $arr['ok'] $arr[3] $arr[CAPS] $arr[$var] $arr[ 'bar' ]

我不知道写动态替换和所有这些排除。另外,我忘了添加另一个排除项,那些已经以
$arr['key']
的形式出现的排除项。我正试图解决一些问题,以进入PHP5.3。我使用了
sed-e/
[root@vmX]#echo$arr[foo]$arr['ok']$arr[3]$arr[CAPS]$arr[$var]$arr[bar]| perl-pe“s/(\$\w+\[\s*)(?![A-Z\d]+\b)(\w+(\s*])/$1'$2'$3/g”-bash:![A-Z\d]+\b:未找到事件
@Andi,请为您的shell使用正确的报价。我的例子是在windows上。试试上面的那行。
echo'$arr[foo]$arr[''ok']$arr[3]$arr[CAPS]$arr[$var]$arr[bar]
在bash中效果很好。引用单引号和双引号在任何shell中都很糟糕。;-)我必须逃出这个世界!因为贝壳。我仍然得到了“回音”的回音(Eco)ArArr[foo[foo]arr[foo[foo]arr[foo]arr[CAPS]arr[var]arr[arr[bar]arr[bar[bar]arr[bar]arr[Bur[foo[foo[foo]arr[foo]arr[foo]arr[foo][3]arr[Nor[cos]arr[Nar[Cas]arr[CAPS]arr[CAPS]arr[CAPS]arr[CAPS]arr[CAPS]arr[var[arr[arr]arr[arr[arr[arr[arr[arr[arr[arr[arr[arr[arr[arr]arr[arr]arr[Barr[arr[arr[Barr[Barr]arr[Barr[bar]Ar]$arr[$var]$arr[bar]“| perl-pe的/(\$\w+\[\s*)(?![A-Z\d]+\b)(\w+(\s*))/$1'$2'$3/g”