我想将一个项目从一个版本升级到另一个版本,因此需要用相同的模式更改数千行。
示例:
从此
$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}'\]\}
答案 0 :(得分:1)
您还可以使用否定的字符类,并使用\K
来忘记匹配项。在替换中,使用$0
插入由{
和}
匹配:
->\K[^[\n]+\['[^\n']+']
这将匹配
->
匹配-> \K
忘记匹配的内容[^[\n]+
不匹配[或换行符1次以上,也不完全匹配[a-zA-Z]{5,15}
而不是[^[\n]+
\[
匹配[
'[^\n']+'
从'开始匹配,不超过1次,而不是'或换行符,然后是'或恰好是[a-zA-Z]{5,15}
而不是[^\n']+
]
字面上匹配替换为:
{$0}
结果:
$this->{returnData['status']}
确切的版本如下:
->\K[a-zA-Z]{5,15}\['[a-zA-Z]{5,15}']
请注意,[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}
正则表达式匹配对:
\$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}'\])