RegEx referencias en IntelliJ

129

Quiero usar la función de búsqueda y reemplazo de IntelliJ para realizar la siguiente transformación:

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

He intentado lo siguiente:

Texto a buscar: model.put\((.*),(.*)\) Reemplazar con:model\[\\1\] = \\2

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

Dónal
fuente

Respuestas:

196

IntelliJ utiliza $1para referencias de reemplazo de reemplazo .

De la ayuda de IntelliJ:

Para obtener más información sobre las expresiones regulares y su sintaxis, consulte la documentación de java.util.regex Las referencias anteriores deben tener el formato $ n, en lugar de \ n.

Steve K
fuente
15
Parece que no se requiere "\": jetbrains.com/idea/help/… . Además, para mí solo funciona si rodeo explícitamente a mi grupo con "()", de lo contrario no puedo hacer referencia a él más adelante. Ej: búsqueda (foo)reemplazar:$1bar
Ghedeon
@Ghedeon: Probablemente deberías agregar tu comentario como respuesta o a la respuesta existente. Su sugerencia para poner la expresión en () es lo que funcionó para mí.
lector de mente
1 el bit de información que resolvió mi problema relacionado: estoy reemplazando quote-plus envolturas alrededor de las variables con las envolturas de dólares rizado, es decir, '+ var +'que ${var}en algunas cadenas de la plantilla y no podía entender por qué intellij no terminaría la sustitución. Resulta $que se debe escapar en el reemplazo.
worc
13

En resumen, debe utilizar $1a $npara reemplazo de referencias hacia atrás. \1la sintaxis es solo para referencias posteriores dentro de la búsqueda.

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

Si necesita referir 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: sintaxis de expresiones regulares 2016.1, consejos y trucos

Barett
fuente
2

La ayuda contextual en el producto para la expresión regular en Idea 9.0 (y quizás otras versiones) parece ser incorrecta. Dice esto:

  Referencias posteriores
  \norte
  Cualquiera que sea el grupo de captura enésimo

Pero aparentemente, como se mencionó en respuestas anteriores y es mi experiencia, es realmente \ $ n para referencias anteriores, en lugar de \ n

Para obtener esta ayuda contextual, haga clic en el enlace '[Ayuda]' junto a la opción de radio "Expresión regular" en el cuadro de diálogo "Reemplazar texto"

Cañada
fuente
0

IntelliJ IDEA / Referencia / Referencia de sintaxis de expresión regular


Coincide con subexpresión y recuerda la coincidencia. Si necesita usar la subcadena coincidente dentro de la misma expresión regular, puede recuperarla utilizando la referencia inversa (\ num, donde num = 1..n). Si necesita referir 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 de paréntesis en la subexpresión, use "(" o ")".

Cong De Peng
fuente
Encontré lo mismo aquí ; Sin embargo, finalmente tuve éxito usando $ 1, sin la barra invertida.
Joe Tricarico