2009-09-14 12 views
119

que quieren utilizar IntelliJ de de buscar y reemplazar para realizar la siguiente transformación:referencias hacia atrás de expresiones regulares en IntelliJ

// Replace this 
model.put('foo', 'bar') 
// With this 
model['foo'] = bar 

He intentado lo siguiente:

texto para encontrar: model.put\((.*),(.*)\) Reemplazar : model\[\\1\] = \\2

Pero Intellij no parece reconocer \\1 y \\2 como referencias retrospectivas. También probé una sola barra, pero tampoco funciona.

Gracias, Don

Respuesta

177

IntelliJ utiliza para $1reemplazo referencias hacia atrás.

De la ayuda de IntelliJ:

Para obtener más información sobre las expresiones regulares y su sintaxis, consulte la documentación para java.util.regex referencias hacia atrás debe tener $ n, en lugar de \ n formato.

+14

parece como "\" no es necesaria: https://www.jetbrains.com/idea/help/finding-and-replacing-text-in-file.html # d1765718e362. Además, para mí solo funciona si rodeo explícitamente a mi grupo con "()", de lo contrario no puedo hacer referencia más adelante. Ej: search '' '(foo)' '' replace: '' '$ 1bar''' – Ghedeon

+0

@Ghedeon: Probablemente debas agregar tu comentario como respuesta o como respuesta existente. Tu sugerencia para poner la expresión en() es lo que funcionó para mí. – mindreader

+0

+1 el bit de información que resolvió mi problema relacionado: estoy reemplazando las capas de cotización más por variables con envoltorios en dólares, es decir, ''+ var +'' a '$ {var}' en algunas cadenas de plantillas y No podía entender por qué intellij no terminaría el reemplazo. Resulta que '$' necesita ser escapado en el reemplazo. – worc

0

IntelliJ IDEA/Referencia/Referencia de sintaxis de expresiones regulares


Partidos subexpresión y recuerda la coincidencia. Si necesita utilizar la subcadena coincidente dentro de la misma expresión regular, puede recuperarla utilizando la referencia inversa (\ num, donde num = 1..n). Si necesita derivar la subcadena coincidente en algún lugar fuera de la expresión regular actual (por ejemplo, en otra expresión regular en el campo Reemplazo), puede recuperarla usando el signo de dólar ($ num, donde num = 1..n). Si necesita incluir los caracteres entre paréntesis en la subexpresión, use "(" o ")".

+0

Encontré lo mismo [aquí] (http://www.jetbrains.com/idea/webhelp/regular-expression-syntax-reference.html); sin embargo, finalmente tuve éxito usando $ 1, sin la barra invertida. –

+0

@JoeTricarico ¡Gracias! Omitir la barra invertida también me solucionó. – oskarth

0

La ayuda contextual dentro del producto para la expresión regular en Idea 9.0 (y tal vez otras versiones) parece ser incorrecta. Se afirma esto:

 
    Back references 
    \n 
    Whatever the nth capturing group matched 

Pero, al parecer, como se menciona en las respuestas anteriores y es mi experiencia, es realmente \ $ n de referencias anteriores, en lugar de \ n

Tienes la oportunidad de esta ayuda contextual haciendo clic en el '[Ayuda]' que aparece junto a la opción de radio "expresión regular" en el "Reemplazar texto" cuadro de diálogo

12

en resumen, usted debe utilizar $1 a $n para reemplazo referencias hacia atrás. La sintaxis \1 es solo para referencias en la búsqueda.

En IntelliJ 2016, la documentación incorporada en la aplicación es engañosa. Aquí está una mejor cita de los documentos completos:

Si necesita hacer referencia a la subcadena coincidente en algún lugar fuera de la expresión regular actual (por ejemplo, en otra expresión regular como una cadena de reemplazo), puede recuperarla usando el signo de dólar ($ num, donde num = 1..n).

Fuente: 2016.1 regular expression syntax, Tips & Tricks