Pregunta

Estoy tratando de averiguar todas las ocurrencias de mi palabra concreta (llamada de método con API desactivada) en todos los archivos en un directorio. Necesito un regexp para encontrar todas las ocurrencias que no contengan llamadas actualizadas (nueva API). ¿Puedes ayudarme por favor?

Ejemplo:

  • API desactivada: Método (A, B, C)
  • Nueva API: Método ({A: A, B: B, C: C})

El RegExp debe encontrar todos los archivos que contienen 'método' pero no 'método ({'.

Gracias.

¿Fue útil?

Solución

Yo diría que la forma correcta es usar el operador negativo de apariencia, ?!

/method(?!\(\{)/

Lo anterior dice: "Cualquier ocurrencia de method eso es no seguido por ({"

Cumple con sus requisitos mejor que los sugeridos /method([^{]/ Como este último no coincide con la cadena final (es decir, abc abc method) y no maneja la combinación de dos caracteres ({ que solicitaste muy bien.

Otros consejos

betelgeuse:tmp james$ echo " method(a,b,c) "> test1
betelgeuse:tmp james$ echo " method(a,b,c) " > test3
betelgeuse:tmp james$ echo " method({a:a, b:b, c:c})" > test2
betelgeuse:tmp james$ grep "method([^{]" test*
test1: method(a,b,c) 
test3: method(a,b,c) 

Para explicar: [ ] Define una clase de caracteres, es decir, el personaje en esta posición puede coincidir con cualquier cosa dentro de la clase.

los ^ Como el primer carácter de la clase es una negación: significa que esta clase coincide con cualquier personaje excepto Los personajes definidos en esta clase.

los { Por supuesto, es el único personaje que nos importa no coincidir en este caso.

Entonces, en algunos, esto coincidirá con cualquier cadena que tenga los caracteres method( seguido de cualquier personaje excepto {.

Hay otras formas en que podrías hacer esto en su lugar:

betelgeuse:tmp james$ grep "method(\w" test*
test1: method(a,b,c) 
test3: method(a,b,c)

\w en este caso es (suponiendo que la localidad C) sea equivalente a [0-9A-Za-z]. Si desea permitir un espacio opcional, puede probar:

betelgeuse:tmp james$ grep "method([[:alnum:][:space:]]" test*
test1: method(a,b,c) 
test3: method( a, b, c) 
betelgeuse:tmp james$ 

(en sintaxis de GREP, [:alnum:] is the same asW;:espacio:refers to any whitespace character - this is represented asS` En la mayoría de las implementaciones regex)

Puedes usar clases de personajes para excluir un siguiendo {, p.ej

/method\([^{]/
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top