Protože MySQL nepodporuje skupiny zachycování zpětných odkazů, typické řešení (\w).*\1
to nebude fungovat. To znamená, že každé dané řešení bude muset vyjmenovat všechny možné dvojky. Kromě toho, pokud mohu říci, zpětné odkazy nejsou platné v předběžných nebo dopředných pohledech a předběžné pohledy a předběžné pohledy nejsou v MySQL podporovány.
Můžete to však rozdělit na dva výrazy a použít následující dotaz:
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'
Není to moc hezké, ale funguje to a mělo by to být také docela efektivní.
Chcete-li podporovat nastavený limit opakujících se znaků, použijte pro svůj sekundární výraz následující vzor:
A(.*?A){X,}
Kde A
je váš znak a X
je počet, kolikrát je to povoleno.
Pokud tedy přidáváte další N
do vašeho řetězce SEPIANN
(celkem 2 N
s), váš dotaz bude:
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}'