2011-01-24 11 views
6
strOutput.replace("/{{[^]*?}}/g",""); 

¿Hay alguna forma de convertir expresiones regulares de JavaScript en expresiones regulares de Java seguro?Cómo convertir javascript regex a safe java regex?

La declaración anterior me da el error:

Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\)

que no estoy tan familiarizado con expresiones regulares, por lo que podría utilizar un poco de orientación.

Gracias!

+1

¿Puedes publicar la Java que creaste que te dio el error? –

Respuesta

11

Deshágase de las barras diagonales. No necesitas los de Java. Además, el sabor de regex de Java no reconoce los switches como /g y /i; esos están controlados por constantes en java.util.regex.Pattern.

Los únicos modificadores Javascript regex que tienen sentido en el mundo Java son /i y /m. Estos mapas a Pattern.CASE_INSENSITIVE y Pattern.MULTILINE (puede usar estos modificadores al crear una expresión regular de la clase Pattern, o puede usarlos en línea; lo mostraré más adelante).

El /g no se asigna a nada, pero se puede controlar mediante el uso de reemplazar el comportamiento frente String.replaceAllString.replaceFirst.

para obtener su código para trabajar, que tendría que hacer algo como esto:

strOutput.replaceAll("{{[^]*?}}", ""); 

Si desea utilizar interruptores, lo que necesita hacer añadir algo como (?i) al comienzo de la expresión regular.

No puede usar String.replace porque toma un CharSequence para el primer argumento y no una expresión regular.

También tenga en cuenta que los métodos de "expresiones rápidas rápidas" que ofrece la clase String pueden no funcionar como esperaba. Esto se debe a que cuando especifica un patrón (digamos abc) como una expresión regular para matches, por ejemplo, el patrón real visto por Java es ^abc$. Entonces abc coincidirá, pero bc no lo hará.

Hay más información here.

0

No necesitaría / 's (barras diagonales al inicio y al final) que se utilizan en javascript para la declaración en línea en lugar de comillas.

debe ser sólo Regex r = new Regex("{{[^]*?}}");

1

Deshacerse de "/" y "/g" al comienzo y al final de la expresión regular. Luego, debe escapar de cada aparición "\" de la siguiente manera: "\\".

La parte "g" significa global. Esto se controla en la forma en que utiliza expresiones regulares en Java en lugar de en la cadena de expresiones regulares.