RESPONDER UNA PREGUNTA

Si para responder la pregunta, crees necesario enviar un archivo adjunto, puedes hacerlo a traves del correo [email protected]

    Pregunta:  66075 - MEJORAR EXPRESIÓN REGULAR DE BÚSQUEDA EN ECLIPSE (JAVA)
Autor:  Carlos Adán López
Buenas.
Estoy trabajando en un plugin de búsqueda para Eclipse y tiene que ser capaz entre otras cosas de detectar expresiones del tipo:
texto from="(XXX0 operador1 XXX1)" operador2 XXX2 to XXX3
O bien:
texto from="(XXX0 operador1 XXX1)" operador2 XXX2 to XXX3.

donde XXX es el parámetro a buscar y puede estar repetido dentro de la expresión.

Pensé que una solución bastante óptima y genérica podría ser una expresión del tipo:
<map.*fromExpression(s*=s*".*XXX[s).]|.*s*[=<>]s*.*XXX[s).]?")
Pero el problema principal es que por alguna razón si el parámetro XXX se encuentra varias veces en la expresión solo retorna el Match en uno de ellos. Investigando comprové que es como si se solaparan las búsquedas dentro del mismo patrón, incluyendo o no los caracteres ' .* ' (cualquier sucesión de caracteres excepto final o salto de línea). De todos modos el hecho de incluir ' .* ' también resultó ser una causa para que este error apareciese.

Para este problema encontré una solución del tipo:
<maps*fromExpressions*=s*"(()?[d|w]*(.|$)?XXX[.$]?s|.s(()?[d|w]*(.|$)?XXX[.$]?[s)]|(.=|and|or|not|.)s(w*)?[$|.][dw*]*[$|.]XXX[.$]?s|"s*to="[wd]*[.$]?XXX[.$"]?

Es decir, tratar independientemente cada parte de la expresión y evitar el uso de ' .* ', sin embargo esto supone complicar la expresión y correr el muy probable riesgo de no contemplar algún operador.

Lo mismo sucede en el caso de controlar el exact matching, en cuyo caso lo hacía con los caracteres ' .* ' antes y después del parámetro para cuando no tenga por que ser exacto, pero ante el problema mencionado había pensado en solucionarlo con algo del tipo ' [d|w]* ', suponiendo que solo se permitan dígitos y letras pero nuevamente se corre el riesgo de que no siempre sea así y no se contemple algún caso.

Sería una muy buena ayuda si alguien fuese capaz de proponer una posible solución para simplificarlo (si es posible) o al menos alguna posible guía o propuesta.

Gracias.


Nombre
Apellidos
Correo
Comentarios