¿Reemplazar texto dentro del patrón coincidente?


1

Al usar cualquier editor de flujo (o vim), existe una forma rápida, eficiente pero simple de hacer una sustitución, pero solo dentro de un patrón ya coincidente. por ejemplo :

Reemplace todos los parámetros "foo" con "bar" pero solo para la función "func":

test(foo, baz) func(foo) truc(foo) func(test, foo)

->

test(foo, baz) func(bar) truc(foo) func(test, bar)

se haría buscando primero: /func\((.*)\)/

... Y luego, dentro del grupo capturado (o al menos la partida completa), haz s/foo/bar/g

NOTA: He leído usando sed para reemplazar dos patrones dentro de un patrón más grande

Pero estoy buscando una manera más simple, no necesariamente usando sed

Respuestas:


0

Usando el editor Notepad ++, también funciona con SublimeText (al menos V3.0):

  • Ctrl+H
  • Encontrar que: \bfunc\([^)]*\K\bfoo\b
  • Reemplazar con: bar
  • Desmarque el caso Match
  • comprobar envolver
  • comprobar expresión regular
  • Replace all

Explicación:

\bfunc\(    # literally func(, word boundary to avoid abcfunc
[^)]*       # 0 or more not closing parenthese
\K          # forget all we have seen until this position
\bfoo\b     # foo surrounded with word boundaries

Resultado para el ejemplo dado:

test(foo, baz) func(bar) truc(foo) func(test, bar)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.