Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式查找方括号内的所有文本_Regex_Sed_Find - Fatal编程技术网

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

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'\

我有一个问题,因为PHP版本,我需要将代码从
$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语法)。请参阅