sql >> Database >  >> RDS >> Mysql

Mysql reguliere expressie zoeken zonder herhalende tekens

Aangezien MySQL geen back-referencing capture-groepen ondersteunt, is de typische oplossing van (\w).*\1 zal niet werken. Dit betekent dat elke gegeven oplossing alle mogelijke dubbels moet opsommen. Verder zijn, voor zover ik kan nagaan, back-referenties niet geldig in look-aheads of look-behinds, en look-aheads en look-behinds worden niet ondersteund in MySQL.

U kunt dit echter in twee uitdrukkingen splitsen en de volgende query gebruiken:

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'

Niet erg mooi, maar het werkt en het zou ook redelijk efficiënt moeten zijn.

Gebruik het volgende patroon voor uw secundaire uitdrukking om een ​​ingestelde limiet van herhaalde tekens te ondersteunen:

A(.*?A){X,}

Waar A is jouw karakter en X is het aantal keren dat het is toegestaan.

Dus als je nog een N . toevoegt naar je string SEPIANN (voor een totaal van 2 N s), wordt uw vraag:

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. Wat is het optimale MYSQL-querynummer in php-script?

  2. Voeg gegevens slechts één keer toe aan de sqlite-database en lees ze meerdere keren

  3. SQL Group BY met tekenreeksen in nieuwe kolommen

  4. PDO weigert een rij gegevens te verwijderen (in specifieke tabel)