sql >> Base de Datos >  >> RDS >> Mysql

Búsqueda de expresiones regulares de Mysql sin caracteres repetidos

Dado que MySQL no admite grupos de captura de referencias inversas, la solución típica de (\w).*\1 no trabajará. Esto significa que cualquier solución dada deberá enumerar todos los dobles posibles. Además, por lo que puedo decir, las referencias anteriores no son válidas en las búsquedas anticipadas o retrospectivas, y las búsquedas anticipadas y retrospectivas no son compatibles con MySQL.

Sin embargo, puede dividir esto en dos expresiones y usar la siguiente consulta:

SELECT * FROM words
WHERE word REGEXP '^[SEPIAN]{1,6}$'
AND NOT word REGEXP 'S.*?S|E.*?E|P.*?P|I.*?I|A.*?A|N.*?N'

No es muy bonito, pero funciona y también debería ser bastante eficiente.

Para admitir un límite establecido de caracteres repetidos, use el siguiente patrón para su expresión secundaria:

A(.*?A){X,}

Donde A es tu personaje y X es el número de veces que está permitido.

Entonces, si está agregando otro N a su cadena SEPIANN (para un total de 2 N s), su consulta se convertiría en:

SELECT * FROM words
WHERE word REGEXP '^[SEPIAN]{1,7}$'
AND NOT word REGEXP 'S.*?S|E.*?E|P.*?P|I.*?I|A.*?A|N(.*?N){2}'