vim %s/()()/()/g 起什么作用

vim %s/()()/()/g 起什么作用

我使用 vim 开发了一个 Go 脚本,我打算将 ()() 替换为 (),所以我使用了%s/()()/()/g,然后我需要帮助来理解它的结果:

()p()a()c()k()a()g()e() ()s()u()b()
()
()i()m()p()o()r()t()(()
()  ()"()f()m()t()"()
())()
()f()u()n()c() ()S()u()b()F()u()n()(())() (){()
()  ()f()m()t().()P()r()i()n()t()l()n()(()"()i()n() ()S()u()b()F()u()n()"())()
()}()
()f()u()n()c() ()s()u()b()F()u()n()(())() (){()
()  ()f()m()t().()P()r()i()n()t()l()n()(()"()i()n() ()s()u()b()F()u()n()"())()
()}()

似乎每个字符(甚至是空白字符)周围都插入了一个 ()

答案1

括号在正则表达式中有特殊含义。必须对它们进行转义:

%s/\(\)\(\)/()/g

你的正则表达式会发生什么情况:

()代表捕获组,在本例中,它什么都没捕获,因为括号内没有任何内容。有两个捕获组都没有捕获任何内容,都匹配空字符串。然后,用一对括号替换所有这些空字符串。这就是为什么最终字符之间会有一对括号。

学习正则表达式的有用网站

相关内容