sql >> Databáze >  >> RDS >> Mysql

Vyhledávání pomocí regulárních výrazů Mysql bez opakujících se znaků

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


  1. Oracle jako řešení mutujících tabulek

  2. Jak dotazovat sloupec json na prázdné objekty?

  3. Jak nasadit vysoce dostupný Canvas LMS s databázovým clusterem PostgreSQL

  4. Jak spočítat sloupce dotazu MySQL, když je počet vrácených sloupců dynamický?