使用正则表达式查找方括号内的所有文本

时间:2015-06-23 01:52:13

标签: regex

我遇到一个问题,因为PHP版本,我需要将代码从$array[stringindex]更改为$array['stringindex'];

所以我想使用正则表达式查找所有文本,并将它们全部替换掉​​。如何查找看起来像这样的所有字符串? $array[stringindex]

3 个答案:

答案 0 :(得分:3)

以下是PHP的解决方案:

$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);

你可以try it out interactively here。我搜索以字母开头的变量,否则$foo[42]之类的东西会被转换为$foo['42'],这可能是不可取的。

请注意,此处的所有解决方案都无法正确处理每个案例。

查看Sublime Text regex help,您似乎可以将(\\$[[:alpha:]][[:alnum:]]+\\[)([[:alpha:]][[:alnum:]]+)(\\])粘贴到搜索框中,将$1'$2'$3粘贴到替换字段中。

答案 1 :(得分:1)

这取决于您要用来替换的工具。 以sed为例,它会是这样的:

sed "s/\(\$array\)\[\([^]]*\)\]/\1['\2']/g"

答案 2 :(得分:1)

如果允许,您只需执行以下操作:

sed -i "s/(\$[^[]*[)([^]]*)]/\1'\2']/g" file

说明:

  • sed "s/pattern/replace/g"是一个sed命令,用于搜索模式并将其替换为replace。 g选项表示每行替换多次。
  • (\$[^[]*[)([^]]*)]此模式由两组组成(在括号中)。第一个是美元,后跟一系列非[个字符。然后是一个开口方括号,接着是一系列非关闭支架,然后是一个关闭方括号。
  • \1'\2']替换字符串:\1表示插入第一个捕获的组(类似于\2。基本上我们将\2括在引号中(这是您想要的)。
  • -i选项表示更改应应用于最终提供的原始文件。

有关详细信息,请参阅man sed

这可以与命令结合使用,如下所示:

find . -name '*.php' -exec sed -i "s/(\$[^[]*[)([^]]*)]/\1'\2']/g" '{}' \;

这会将sed命令应用于找到的所有php个文件。