PDA

Ver la Versión Completa : Búsqueda con expresiones regulares en Writer



RGB
30-ago-2008, 17:55
El sistema de búsqueda avanzada de texto utilizado por OpenOffice.org descansa en las así llamadas "expresiones regulares". Este sistema es sumamente potente, pero también muy difícil de utilizar. En la siguiente página
http://ricardo.berlasso.googlepages.com/expresionesregulares
encontrarán una introducción al tema con algunos ejemplos y un par de links para profundizar aún más este a la vez complejo, útil e interesante tema.
Acepto críticas y sugerencias, pero como digo en mi home:

Si lo que aquí encuentras te sirve, seré feliz. Si no te sirve ¡no es culpa mía!
:p

migtei
30-ago-2008, 20:55
Para kde tienes en el paquete kdeutils3-extra varios programas útiles, entre ellos /opt/kde3/bin/kregexpeditor que sirve para hacer experimentos y aprender. Ayuda a entender la mecánica de las expresiones regulares partiendo de una interfaz gráfica, su aspecto:
http://geneura.ugr.es/~jmerelo/tutoriales/perl-apresurados/img/kregexpeditor.png
Suerte...

RedDwarf
31-ago-2008, 00:44
En el ejemplo de migtei. Si quisieras poner "cualquier cosa menos 'on'" no hay forma de hacerlo que no sea "o[^n]|[^o]n|[^o][^n]"? Es algo que siempre hecho en falta, pero como hay mil implementaciones de expresiones regulares, cada una con sus peculiaridades, me gustaría saber si hay alguna que permita negar algo más que un sólo caracter.

RGB
31-ago-2008, 10:24
pero como hay mil implementaciones de expresiones regulares, cada una con sus peculiaridades
Exacto. La que explico en mi página es la utilizada por OpenOffice.org
En OOo se puede negar más de un carácter sin problemas: [^on] niega "on". De hecho, el primer ejemplo que pongo, (([^[0-9]]*)*), niega un número arbitrario de arbitrarios números consecutivos. ;)

RedDwarf
31-ago-2008, 13:38
No me he explicado bien. Lo que yo querría es una expresión regular simple que dado este texto:

cajon
cajin
calon
camln
encontrase cajin, calon y camln; pero no cajon.
Este expresión lo hace: "ca(j[^o]|[^j]o|[^j][^o])n"... pero es muy complicado, y en cuanto en vez de dos letras son diez la cosa se desmadra.

"ca[^jo]n" significa que busque palabras de cuatro letras, que empiecen con "ca" y acaben en "n"... siendo la tercera letra cualquier cosa excepto "j" o "o".

En mis pruebas esto es así también en la implementación de OpenOffice.org.

RGB
01-sep-2008, 15:47
pero es muy complicado, y en cuanto en vez de dos letras son diez la cosa se desmadra.
3628800 combinaciones... y sí, se desmadra. :p
Prueba con esto

ca[^j]*[^o]*n
al menos en tu ejemplo (y en OOo) funciona: encuentra todas las palabras salvo cajon. También encontraría can, pero como no está en la lista...
¡Suerte!

RedDwarf
01-sep-2008, 18:43
También encontraría can, pero como no está en la lista...
En realidad en la mayoría de los casos también buscarías can, no es mala opción.
Me gustaría más algo como ca^{jo}n, que se viera claro que estás negando un pedazo, pero tu opción tampoco es tan horrible como la que proponía yo.