Regex 使用正则表达式查找方括号内的所有文本
我有一个问题,因为PHP版本,我需要将代码从Regex 使用正则表达式查找方括号内的所有文本,regex,sed,find,Regex,Sed,Find,我有一个问题,因为PHP版本,我需要将代码从$array[stringindex]更改为$array['stringindex'] 所以我想用正则表达式找到所有的文本,并替换它们。如何找到所有像这样的字符串$array[stringindex]这取决于要使用的工具来进行替换。 以sed为例,它是这样的: sed "s/\(\$array\)\[\([^]]*\)\]/\1['\2']/g" 如果允许,您可以简单地执行以下操作: sed -i "s/(\$[^[]*[)([^]]*)]/\1'\
$array[stringindex]
更改为$array['stringindex']代码>
所以我想用正则表达式找到所有的文本,并替换它们。如何找到所有像这样的字符串$array[stringindex]
这取决于要使用的工具来进行替换。
以sed为例,它是这样的:
sed "s/\(\$array\)\[\([^]]*\)\]/\1['\2']/g"
如果允许,您可以简单地执行以下操作:
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" '{}' \;
这将对找到的所有
php
文件应用sed命令。这里有一个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);
你可以。我搜索以字母开头的变量,否则像$foo[42]
这样的东西会被转换成$foo['42']
,这可能是不可取的
请注意,这里的所有解决方案都不能正确处理所有情况
看一下,您似乎可以将
(\\$[:alpha:][:alnum:]+\\[)([:alpha:][:alnum:]+(\\\]])
粘贴到搜索框中,并将$1'$2'$3
粘贴到替换字段中。我现在正在使用升华文本,它是否相同?它似乎像Java正则表达式格式:regex=(\$array)([^]]]*)],replacement=$1['$2']升华文本使用boost库(Pearl语法)。请参阅