Mysql
 sql >> Base de données >  >> RDS >> Mysql

Recherche d'expressions régulières MySQL sans caractères répétitifs

Étant donné que MySQL ne prend pas en charge les groupes de capture de référence arrière, la solution typique de (\w).*\1 ne fonctionnera pas. Cela signifie que toute solution donnée devra énumérer tous les doubles possibles. De plus, pour autant que je sache, les références arrière ne sont pas valides dans les analyses en avant ou en arrière, et les analyses en avant et en arrière ne sont pas prises en charge dans MySQL.

Cependant, vous pouvez diviser cela en deux expressions et utiliser la requête suivante :

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'

Pas très joli, mais ça marche et ça devrait être assez efficace aussi.

Pour prendre en charge une limite définie de caractères répétés, utilisez le modèle suivant pour votre expression secondaire :

A(.*?A){X,}

A est votre caractère et X est le nombre de fois qu'il est autorisé.

Donc, si vous ajoutez un autre N à votre chaîne SEPIANN (pour un total de 2 N s), votre requête deviendrait :

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}'