我想将对象属性引用转换为数组,如下所示:
$ stuff-> a_property
进入
$东西[ 'a_property']
我试过
s/->.*\>/['\0'\]/g
但它给了我
$东西[ ' - > a_property']
答案 0 :(得分:5)
您可以使用已捕获的群组:
:%s/->\(.*\)\>/['\1'\]/
\(.*\)
用于在->
之后将值替换为用于替换的组#1。这将为您提供$stuff['a_property']
编辑:如果您想在每行进行多次替换,请使用:
:%s/->\(.\{-}\)\>/['\1'\]/g
.\{-}
用于非贪婪匹配,而.*
则贪婪。
答案 1 :(得分:1)
表达式中的正则表达式匹配->
,然后替换[]
内的整个匹配项。这就是你得到的原因
$stuff['->a_property']
@anubhava已经发布了答案,但是我会使用\v
运算符提出另一种可能更具可读性的变体:
:s/\v\-\>(.*)>/['\1']/g
\v
表示“处理模式中的所有后续字符,不包括0-9
,a-z
,A-Z
和_
,视为特殊”。有关详细信息,请参阅:help /\v
。
答案 2 :(得分:1)
:s/->\zs.*\>/['\0'\]/g
也可以从->
的文字中排除\0
。