在PHP文件中,我正在尝试将所有数组表示法转换为对象表示法。换句话说,我正在尝试转换所有这些:
$事情[ '键']
成:
$东西─>键
我认为这是一个简单的正则表达式问题。我正在寻找这种模式:
\$thing\['(.*?)'\]
替换为:
$thing->\1
它在Text Wrangler中正常工作,但在VIM中不起作用。这是我正在尝试运行的完整命令:
:s/\$thing\['(.*?)'\]/$thing->\1/g
我得到的错误是:
E486: Pattern not found: \$thing\['(.*?)'\]
我还尝试了围绕该组使用转义括号的命令:
:s/\$thing\['\(.*?\)'\]/$thing->\1/g
但我得到同样的错误。有人可以帮助我吗?
答案 0 :(得分:2)
您必须转义括号才能进行分组,vim使用.\{-}
表达式进行非贪婪的匹配。这就像是:
:s/\$thing\['\(.\{-}\)'\]/$thing->\1/g
答案 1 :(得分:2)
作为替代方案,您也可以这样做:
qq ; save macro in register q
/$thing<CR> ; look for next $thing
"adi' ; remove everything between quotes on current line and place it in register a
; result: $thing[''_]
l ; move to next character on right
; result: $thing['']_
d% ; remove everything up to matching bracket
; result: $thing
i-><ESC>
; result: $thing->
"ap ; paste from register a
; result: $thing->key
q ; end macro
并使用宏删除下一个:
@q
以及下一个重复宏:
@@
并重复宏42次:
42@@
答案 2 :(得分:0)
参见Grouping and backreferences,必须转义paranthesis。 以下适用于我
:s/\$thing\['\(.*\)'\]/$thing->\1/g