2010-05-31 8 views
10

tengo una expresión regular definida en Python/Ruby/PHP que es así¿Forma fácil de convertir expresiones regex a una expresión regular compatible con Java?

"(forumdisplay.php\?.*page=%CURRENTPAGE%)" 

Cuando lo hago para Java, tengo que duplicar escapar de ese signo de interrogación para \\?

así:

"(forumdisplay.php\\?.*page=%CURRENTPAGE%)"; 

¿Existe alguna función que pueda usar para hacer eso automáticamente? ¿O tendría que cambiar todas mis expresiones regulares para trabajar con el motor de expresiones regulares de Java?

+2

También debe escapar de un punto ('.') que tiene un significado especial (cada carácter). – Crozin

Respuesta

0

Un buen comienzo suele ser simplemente hacer un "buscar reemplazar todo" de "\" con "\\".

No está haciendo realmente un cambio para que esto funcione con el motor java regex. Simplemente tiene que lidiar con el esfuerzo de almacenar una expresión regular en Java String ... Podría hacer esto en una función, pero eso generaría más código para mantener. Yo sugeriría hacer un hallazgo sustituir como se describió anteriormente ...

1

Personalmente yo uso dentro de los plugins de Eclipse excelente desde el sitio http://www.bastian-bergerhoff.com/eclipse/features/
Usted encontrará que hay QuickREx para la expresión regular y también plug-in developper XPath que yo uso mucho.
Para QuickREx, simplemente pruebe su expresión regular y presione el botón para copiarla en su editor activo con los caracteres de escape correctos.
Es imprescindible, solo pruébalo.

+0

Hola, tu enlace ya no es válido. Error 404 –

3

Tenga en cuenta que esto es no el motor de expresiones regulares de Java que requiere las barras invertidas dobles, pero el compilador Java . Cuando se escribe lo siguiente en el código fuente de Java:

"(forumdisplay.php\\?.*page=%CURRENTPAGE%)" 

el compilador de Java interpreta esto como la cadena:

(forumdisplay.php\?.*page=%CURRENTPAGE%) 

El motor de expresiones regulares de Java a continuación, hace exactamente lo mismo que otros motores de expresiones regulares - el signo de interrogación (porque se escapó) se trata literalmente.

Algo similar ocurre en Python - las dos cadenas siguientes son idénticos:

r"(forumdisplay.php\?.*page=%CURRENTPAGE%)" 
"(forumdisplay.php\\?.*page=%CURRENTPAGE%)" 

Se trata de utilizar el pitón r notación para una cadena "en bruto", donde las barras invertidas no son interpretados por el compilador.

+1

y no hay equivalente a la cadena sin formato en Java? – James

+0

No, tienes que hacer el doble escape en Java – bwawok

10

probar esta herramienta en línea hacia fuera: http://www.regexplanet.com/advanced/java/index.html

Toma su expresión regular normal y da salida a la expresión de cadena compatible con Java. Me ahorró muchísimo tiempo convirtiendo enormes cadenas de expresiones regulares.

Tenga en cuenta que no todas las expresiones regex funcionan en java. He visto una expresión regular de validación de php extraña que simplemente se comporta de forma diferente en la coincidencia de patrones de Java.

+0

Este tipo tiene la respuesta –

Cuestiones relacionadas