Título: Expresion regular para filtrar una búsqueda Publicado por: LeandroA en 29 Agosto 2010, 15:47 pm Hola, estoy intentando resolver lo siguiente, si se fijan en la búsqueda de windows utiliza cierta expresiones para resolver la búsqueda por ejemplo si ingresamos
Citar casa *.bmp Nos devuelve todos los archivos .bmp y cualquier tipo de archivo que contenga la palabra casa Citar *.jpg *.bmp Nos devuelve todos los archivos .bmp y .jpg Citar ???.bmp Nos devuelve todos los archivos .bmp de 3 letras por ejemplo "Cut.bmp" "New.bmp" Citar ar*.bmp nos devuelve todos los archivos .bmp que comienzen con "ar" que tipo de expresión regular debería implementar para poder cumplir esas condiciones intento hacer una función parecida a esta Código: Private Function IsInFilter(ByVal sFilter As String, ByVal sMatch As String) As Boolean Código: Debug.Print IsInFilter("*.bmp ????.jpg", "foto.png") Gracias Título: Re: Expresion regular para filtrar una búsqueda Publicado por: Psyke1 en 29 Agosto 2010, 16:02 pm Hola LeandroA!!
Mira, te hice un ejemplo (Creo que es similar a lo que buscas): Código
Un ej: Código
Resultado: Citar LeandroA.jpg Mi_foto.jpg PD: Si tienes problemas, se puede mejorar la Expresion Regular, te lo he hecho "a lo rapido" :P Espero haberte ayudado ;) DoEvents¡! :P EDIT: Para sacar jpg y bmp: Código: ((\S)+\.(jpg|bmp)) ????.jpg es igual a: Código: (\S{4}\.jpg) ar*.jpg equivale a : Código: (ar(\S)*\.jpg) Título: Re: Expresion regular para filtrar una búsqueda Publicado por: raul338 en 29 Agosto 2010, 18:15 pm lo que hay que hacer es reemplazar los filtros antes de pasarlos por expresiones regulares: Reemplazar los puntos "." por "\." Los comodines "?" representan un solo caracter: . Los comodines "*" representan mas de un caracter: .+ Por lo que quedarian los filtros asi Citar Código: casa *.bmp Código: casa .+\.bmp Código: ???.bmp Código: ...\.bmp Código: ar*.bmp Código: ar.+\.bmp Hay un problema con este filtro Código: *.jpg *.bmp Código: .+\.jpg .+\.bmp Asi que si en caso fuera asi, habria que probar antes si el filtro concuerda con esta expresion regular Código: ((?:\*|\?+)\.\w+\s?)+ Código
Código
Espero que te sirva! :P Título: Re: Expresion regular para filtrar una búsqueda Publicado por: Psyke1 en 29 Agosto 2010, 18:20 pm Exacto raul338!! ;-)
Ahora si que si... :D Tambien pense algo asi, pero me pudo la vagancia... :silbar: :laugh: DoEvents¡! :P Título: Re: Expresion regular para filtrar una búsqueda Publicado por: LeandroA en 29 Agosto 2010, 20:20 pm hola gracias a ambos, en realidad es mas complicado de lo que parece.
hice un par de pruebas y no esta correcto. MsgBox IsInFilter("*.bmp *jpg", "foto.bmp") = falso ( es verdadero) MsgBox IsInFilter("*.bmp ????.jpg", "foto.jpg") = falso ( es verdadero) MsgBox IsInFilter("*.bmp", "foto.bmp") = falso ( es verdadero) no se si se entendio bien el usuario en la busqueda tipea "*.bmp ????.jpg" luego a medida que se realiza la busqueda iran pasando una series de archivos por la funcion. Por ejemplo "calc.exe", "documento.doc", "Mi foto.bmp" etc. etc. ejemplos correctos "*.bmp; *.jpg *.png" este ejemplo lista todos los .bmp, .jpg, .png que pasen por la funcion (y notece que ensima en una parte puse ";" y en otra no) "a?????.bmp" este por ejmplo va a filtrar todos .bmp los que comienzen con a y tengan cinco letras intermedias "Azteca.bmp" "active.bmp" bueno el mejor ejemplo esta en la busqueda de windows si buscan algo veran como trabaja. SAludos Título: Re: Expresion regular para filtrar una búsqueda Publicado por: raul338 en 29 Agosto 2010, 20:27 pm hice un par de pruebas y no esta correcto. MsgBox IsInFilter("*.bmp *jpg", "foto.bmp") = falso ( es verdadero) MsgBox IsInFilter("*.bmp ????.jpg", "foto.jpg") = falso ( es verdadero) MsgBox IsInFilter("*.bmp", "foto.bmp") = falso ( es verdadero) no se si se entendio bien Leandro... no se si te diste cuenta, pero, lo estas usando al revez :xD De todas formas, cambiando el orden los parametros (o la firma) tiran true ;D Ahi cambie la firma en el codigo anterior... Título: Re: Expresion regular para filtrar una búsqueda Publicado por: LeandroA en 29 Agosto 2010, 20:31 pm Que bruto que soy, tenes razón no me habia dado cuenta que están cambiado los parámetros jejeje
buenisimo funciona de lujo. :laugh: :laugh: este quizas no tira correcto MsgBox IsInFilter("a?????.bmp", "Azteca.bmp") = true MsgBox IsInFilter("a?????.bmp", "Aztsdfdfdseca.bmp") = true la segunda deberia ser false, voy a ver si me sale algo Título: Re: Expresion regular para filtrar una búsqueda Publicado por: raul338 en 29 Agosto 2010, 20:41 pm MsgBox IsInFilter("a?????.bmp", "Aztsdfdfdseca.bmp") = true deberia ser false Asi que si en caso fuera asi, habria que probar antes si el filtro concuerda con esta expresion regular Código: ((?:\*|\?+)\.\w+\s?)+ Jajaja toy quedando re pesado seguro, pero es lo que se me ocurrio a mi, la solucion, cambiar la expresion regular :P pero.... ahora no tengo tiempo (apenas me paso de a ratos por aca) De todas formas, debe ser simple el reemplazo, capaz agregando un \w+ o .+ en el medio :P Título: Re: Expresion regular para filtrar una búsqueda Publicado por: Psyke1 en 29 Agosto 2010, 21:54 pm Os dejo esta funcion por si ayuda... ;)
Código
Un ejemplo: Código
Me devuelve: Citar (a.+\.jpg|.{4}\.bmp) Te da la Expresion Regular toda bonita ::) DoEvents¡! :P EDITO: Se me ocurre otra forma de hacerlo, mañana posteo.. :) Título: Re: Expresion regular para filtrar una búsqueda Publicado por: Psyke1 en 29 Agosto 2010, 23:45 pm Bueno, no me pude aguantar, aqui tienes LeandroA ;):
Código
Me devuelve: Citar Verdadero ::)Verdadero Verdadero Verdadero Verdadero Falso Verdadero Falso DoEvents¡! :P Título: Re: Expresion regular para filtrar una búsqueda Publicado por: raul338 en 30 Agosto 2010, 00:54 am Código
Sabes lo que pasaria si busco "el archivo con espacios en el nombre.doc"? :P EDIT: Intenta poner eso en el buscador y winxp empieza a tirar fruta :xD, asi que, esta bien tu codigo Edit: En windows 7 no funciona poner "*.mp3 *.wav" porque no devuelve nada jeje... Título: Re: Expresion regular para filtrar una búsqueda Publicado por: LeandroA en 30 Agosto 2010, 08:38 am Muchas gracias ;-) anda de 10, se agradece a ambos.
Saludos. Título: Re: Expresion regular para filtrar una búsqueda Publicado por: Psyke1 en 30 Agosto 2010, 09:02 am Código
Sabes lo que pasaria si busco "el archivo con espacios en el nombre.doc"? :P EDIT: Intenta poner eso en el buscador y winxp empieza a tirar fruta :xD, asi que, esta bien tu codigo Edit: En windows 7 no funciona poner "*.mp3 *.wav" porque no devuelve nada jeje... Bueno aun asi solo hay que hacerle una pequeña modificacion... ;) DoEvents¡! :P |