sql >> Database teknologi >  >> RDS >> Mysql

Mysql Regular Expression-søgning uden gentagne tegn

Da MySQL ikke understøtter tilbage-refererende opsamlingsgrupper, er den typiske løsning af (\w).*\1 vil ikke virke. Dette betyder, at enhver givet løsning skal opregne alle mulige fordoblinger. Desuden, så vidt jeg kan se, er tilbage-referencer ikke gyldige i look-aheads eller look-behinds, og look-aheads og look-behinds er ikke understøttet i MySQL.

Du kan dog opdele dette i to udtryk og bruge følgende forespørgsel:

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'

Ikke særlig kønt, men det virker, og det burde også være ret effektivt.

For at understøtte en fastsat grænse for gentagne tegn skal du bruge følgende mønster til dit sekundære udtryk:

A(.*?A){X,}

Hvor A er dit tegn og X er antallet af gange, det er tilladt.

Så hvis du tilføjer endnu en N til din streng SEPIANN (for i alt 2 N s), vil din forespørgsel blive:

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. SQL-forespørgsel i FB JavaScript

  2. Sammenføjning resultatet af to forespørgsler mysql

  3. php-forespørgsel til iOS bredde- og længdegrad søger ikke efter nærliggende mysql lat og lon med et xml-output

  4. Konverter dato oprettet af jquery datepicker til et standard mysql-datoformat