Hola,
Perdonen el retraso pero he querido estar un poco mas seguro a la hora de postear para no alargar mucho la charla.
Gracias jurena por responder ... con un poco suerte y usando algo de logica he llegado a encontrar lo de la equivalencia de /b y [[:<:]] buscando entender porque los testers online no acceptan la expresion [[:<:]] ... incluso abri un tema por esto en el foro regex por si sabe alguien algun tester regex online que accepte esto [[:<:]]
hace unos dias me respondi solo en aquel foro y he dado el tema por resuelto.
Pero de todos modos Gracias jurena ... imaginate que no lo habia encontrado. Tu respuesta me habria sido de gran ayuda.
Ademas tenias razon ... estaba yo equivocado en pensar que solo con esto resolveria mi asunto.
Por esto decidi de mejor tardar un poquito que lanzarme en postear otra y otra vez.
Al final si lo he conseguido ... aqui dejo la solucion por si alguien la necesita o encuentra algun error o alguna mejora:
Código MySQL:
Ver original campo
REGEXP '[[:<:]]".$busqueda."'=1 campo
REGEXP '[[:<:]](".implode("|",excluidos($busqueda,1)).")[[:>:]]'=1 campo
REGEXP '[[:<:]](".implode("|",excluidos($busqueda,1)).")[a-z]{1,}[[:>:]]'=0 campo
REGEXP '[[:<:]](".implode("|",excluidos($busqueda,2)).")[[:>:]]'=1 campo
REGEXP '[[:<:]](".implode("|",excluidos($busqueda,2)).")[a-z]{1,}[[:>:]]'=0 )
campo
REGEXP '[[:<:]](".implode("|",excluidos($busqueda,3)).")[[:>:]]'=1 campo
REGEXP '[[:<:]](".implode("|",excluidos($busqueda,3)).")[a-z]{1,}[[:>:]]'=0 )
campo
REGEXP '[[:<:]](".implode("|",excluidos($busqueda,4)).")[[:>:]]'=1 campo
REGEXP '[[:<:]](".implode("|",excluidos($busqueda,4)).")[a-z]{1,}[[:>:]]'=0 )
campo
REGEXP '[[:<:]](".implode("|",excluidos($busqueda,5)).")[[:>:]]'=1 campo
REGEXP '[[:<:]](".implode("|",excluidos($busqueda,5)).")[a-z]{1,}[[:>:]]'=0 )
)
Explico la parte PHP:
la variable
$busqueda puede tomar cualquier valor
La funcion
excluidos($busqueda,$nr) me devuelve un
array()con todas las palabras excluidas que empiezan por
$busqueda y tienen como longitud 1,2,3,4,5 ... caracteres (si no hay ninguna palabra me devuelve el caracter "!" ) ... que luego empleando implode uso "|" como division y sale una cadena asi:
para|esta|bien etc ... dependiendo de las palabras excluidas que encuentra ... o si no encuentra ninguna la cadena tendra solo el caracter de exclamacion "!" .
Dicha cadena ayuda la construccion de la expresion regular y saldra algo como:
Código MySQL:
Ver originalcampo
REGEXP '[[:<:]](para|esta|bien)[a-z]{1,}[[:>:]]'=0 campo
REGEXP '[[:<:]](para|esta|bien)[[:>:]]' =1
/* o si no hay palabras .... para evitar errores saldra asi */
campo
REGEXP '[[:<:]](!)[a-z]{1,}[[:>:]]'=0 campo
REGEXP '[[:<:]](!)[[:>:]]' =1
el numero como parametro dentro de la funcion implode("|",excluidos($busqueda,1)) es para buscar palabras excluidos de un caracter como "y" "o" ...
implode("|",excluidos($busqueda,2)) para palabras de dos caracteres como "de" "pe" "si" "no" etc
siguiendo asi con palabras de tres caracteres 4 5 ... etc ... hasta llegar a palabras como
"ciclopentanoperhidrofenantreno"
esto si. Siempre hay que añadir un par de consultas para la longitud de la nueva palabra .... por ejemplo si pongo como excluido palabra "estado" ... etc de 6 caracteres tengo que añadir la consulta:
Código MySQL:
Ver original campo
REGEXP '[[:<:]](".implode("|",excluidos($busqueda,6)).")[[:>:]]'=1 campo
REGEXP '[[:<:]](".implode("|",excluidos($busqueda,6)).")[a-z]{1,}[[:>:]]'=0 )
Cosas que se pueden automatizar con programacion
No pongo todavia como solucionado por si se me ha escapado algun error ... pero en unos dias si veo que no hay opiniones lo pondre como resuelto
Doy la gracias otra vez a jurena y gnzsoloyo por su ayuda e ideas
Saludos