Regex 用于替换记事本中字母数字字符的正则表达式++;

Regex 用于替换记事本中字母数字字符的正则表达式++;,regex,notepad++,preg-replace,Regex,Notepad++,Preg Replace,我想将一个项目从一个版本升级到另一个版本,这样就需要用相同的模式更改数千行 例如: 由此 $this->returnData['status'] 对此 $this->{returnData['status']} 通过使用下面的正则表达式,我找到了所有匹配项,但无法用大括号替换 ->[a-zA-z]{5,15}\['[a-zA-z]{5,15}'\] 我用下面的来代替 ->\{[a-zA-z]{5,15}\['[a-zA-z]{5,15}'\]\} 在正则表达式模

我想将一个项目从一个版本升级到另一个版本,这样就需要用相同的模式更改数千行

例如:

由此

 $this->returnData['status']
对此

$this->{returnData['status']}
通过使用下面的正则表达式,我找到了所有匹配项,但无法用大括号替换

->[a-zA-z]{5,15}\['[a-zA-z]{5,15}'\]
我用下面的来代替

->\{[a-zA-z]{5,15}\['[a-zA-z]{5,15}'\]\}

在正则表达式模式下,尝试使用以下“查找并替换”:

Find:    \$this->([A-Za-z]{5,15}\['[A-Za-z]{5,15}'\])
Replace: $this->{$1}

正则表达式匹配表示:

\$this->             match "$this->"
(                    then match and capture
    [A-Za-z]{5,15}   5-15 letters
    \[               [
    '[A-Za-z]{5,15}' 5-15 letters in single quotes
    \]               ]
 )                   stop capture group
替换的只是
$this->
,后面是第一个捕获组,但现在用大括号括起来

如果您只想匹配箭头操作符,不管它前面是什么,那么只需使用此模式,并保持其他所有内容不变:

->([A-Za-z]{5,15}\['[A-Za-z]{5,15}'\])

您还可以使用否定字符类并使用
\K
来忘记匹配。在替换中,使用
$0
插入由
{
}

匹配:

->\K[^[\n]+\['[^\n']+']
那会匹配的

  • ->
    匹配->
  • \K
    忘记匹配的内容
  • [^[\n]+
    不匹配[或换行1+次或完全匹配
    [a-zA-Z]{5,15}
    而不是
    [^[\n]+
  • \[
    匹配
    [
  • '[^\n']+'
    匹配from',1+times not'或换行符,然后'或精确地
    [a-zA-Z]{5,15}
    而不是
    [^\n']+
  • ]
    逐字匹配

替换为:

{$0}
结果:

$this->{returnData['status']}
更精确的版本如下所示:

->\K[a-zA-Z]{5,15}\['[a-zA-Z]{5,15}']


请注意,
[a-zA-z]
[a-zA-z]

谢谢你的回答,但是,我需要为这个模式使用正则表达式->[a-zA-z]{5,15}['[a-zA-z]{5,15}'。$-(我更新了我的答案。如果
$this
不是常数,那么你应该在你的问题中把它说得更清楚。谢谢它对我起了作用。欢迎你。@PavanKarumuri可以通过单击将答案标记为已接受。@PavanKarumuri✓ 在.com上,小心点,
A-z
匹配的不仅仅是字母,请查看ASCII表格。