PCRE - Expresiones Regulares
Publicado por Mari Carmen (145 intervenciones) el 26/09/2013 02:52:10
Les doy una muy cálida bienvenida a mi primera pregunta, a la que pocos se atreverán a contestar.
Os pongo en materia:
La idea principal es conseguir una Expresión Regular que busque coincidencias en un string.
Hasta aquí sencillo jeje.
Tenemos un archivo en el que cada linea contiene una palabra y el contenido de este archivo es volcado a una variable de tipo string... Llamémosla $diccionario.
Tenemos a su vez otra variable de tipo string que contiene unas letras. Llamémosla $letras.
Ahora bien, se ha de buscar en $diccionario mediante un preg_mach_all() las coincidencias de $letras, con la peculiaridad de que no pueden repetirse las letras.
Un ejemplo seria
$letras="ABD";
$diccionario= <<<EOF
ADA
ADB
AAS
PLA
TYR
BDA
DBA
AAA
BBB
OIE
NNW
OKE
BAD
EOF;
El resultado del preg_mach_all() debería ser:
ADB
BDA
DBA
BAD
Ahora la pregunta:
¿Cual es la expresión regular que debo usar para ello para cualquier numero de letras en $letras?
Le he dado mil vueltas y después de calentarme tanto la cabeza decidí hacerlo con funciones recursivas creando todas las posibles combinaciones para $letras y comparándola una a una contra el $diccionario. El problema de este ultimo método es que con un numero de letras mayor que 8 las combinaciones posibles son 8! (factorial) y así subimos hasta que se hace muy lento crear las combinaciones y hacer las comparaciones contra $diccionario.
Quizá no exista solución general con expresiones regulares pero si pudiesen solo darle alguna pequeña idea a esta cabecita llena de humo os lo agradecería mucho!
Un Saludo.
Os pongo en materia:
La idea principal es conseguir una Expresión Regular que busque coincidencias en un string.
Hasta aquí sencillo jeje.
Tenemos un archivo en el que cada linea contiene una palabra y el contenido de este archivo es volcado a una variable de tipo string... Llamémosla $diccionario.
Tenemos a su vez otra variable de tipo string que contiene unas letras. Llamémosla $letras.
Ahora bien, se ha de buscar en $diccionario mediante un preg_mach_all() las coincidencias de $letras, con la peculiaridad de que no pueden repetirse las letras.
Un ejemplo seria
$letras="ABD";
$diccionario= <<<EOF
ADA
ADB
AAS
PLA
TYR
BDA
DBA
AAA
BBB
OIE
NNW
OKE
BAD
EOF;
El resultado del preg_mach_all() debería ser:
ADB
BDA
DBA
BAD
Ahora la pregunta:
¿Cual es la expresión regular que debo usar para ello para cualquier numero de letras en $letras?
Le he dado mil vueltas y después de calentarme tanto la cabeza decidí hacerlo con funciones recursivas creando todas las posibles combinaciones para $letras y comparándola una a una contra el $diccionario. El problema de este ultimo método es que con un numero de letras mayor que 8 las combinaciones posibles son 8! (factorial) y así subimos hasta que se hace muy lento crear las combinaciones y hacer las comparaciones contra $diccionario.
Quizá no exista solución general con expresiones regulares pero si pudiesen solo darle alguna pequeña idea a esta cabecita llena de humo os lo agradecería mucho!
Un Saludo.
Valora esta pregunta


0