Usei o vim para desenvolver um script Go, pretendia substituir ()() por (), então usei %s/()()/()/g
, e preciso de ajuda para entender o resultado:
()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()"())()
()}()
Parece que um () é inserido em cada caractere (mesmo os em branco)
Os parênteses têm um significado especial em regex. Você tem que escapar deles:
O que acontece com o seu regex:
()
representa um grupo de captura, neste caso, não captura nada porque você não tem nada dentro dos parênteses. Você tem dois grupos de captura que não capturam nada, ambos correspondem a uma string vazia. Então você está substituindo todas essas strings vazias por um par de parênteses. É por isso que você finalmente tem um par de parênteses entre os caracteres.Site útil para aprender regex