正则表达式,用于替换Notepad ++中的字母数字字符

时间:2019-05-20 13:22:35

标签: 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}'\]\}

2 个答案:

答案 0 :(得分:1)

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

包围的完整匹配项

匹配:

->\K[^[\n]+\['[^\n']+']

这将匹配

  • ->匹配->
  • \K忘记匹配的内容
  • [^[\n]+不匹配[或换行符1次以上,也不完全匹配[a-zA-Z]{5,15}而不是[^[\n]+
  • \[匹配[
  • '[^\n']+'从'开始匹配,不超过1次,而不是'或换行符,然后是'或恰好是[a-zA-Z]{5,15}而不是[^\n']+
  • ]字面上匹配

Regex demo

替换为:

{$0}

结果:

$this->{returnData['status']}

确切的版本如下:

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

Regex demo

请注意,[a-zA-z] matches more[a-zA-Z]

答案 1 :(得分:0)

尝试在正则表达式模式下使用以下查找和替换:

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

Demo

正则表达式匹配对:

\$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}'\])