我使用 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
你的正则表达式会发生什么情况:
()
代表捕获组,在本例中,它什么都没捕获,因为括号内没有任何内容。有两个捕获组都没有捕获任何内容,都匹配空字符串。然后,用一对括号替换所有这些空字符串。这就是为什么最终字符之间会有一对括号。