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

Hvordan matcher du lige tal af bogstaver eller ulige bogstavtal ved hjælp af regexp til mysql

Et lige antal A'er kan udtrykkes som (AA)+ (en eller flere forekomster af AA; så det matcher AA, AAAA, AAAAAA...). Et ulige antal G'er kan udtrykkes som G(GG)* (én G efterfulgt af nul eller flere forekomster af GG , så det matcher G, GGG, GGGGG...).

Sæt det sammen, og du har:

/(AA)+G(GG)*TC/

Men da regex-motorer vil forsøge at matche så meget som muligt, vil dette udtryk faktisk matche en understreng af AAAGGGTC (dvs. AAGGGTC )! For at forhindre det kan du bruge et negativt lookbehind for at sikre, at tegnet før den første A er ikke en anden A :

/(?<!A)(AA)+G(GG)*TC/

...bortset fra at MySQL ikke understøtter lookarounds i deres regexes.

Det du i stedet kan gøre er at angive, at mønsteret enten starter i begyndelsen af ​​strengen (forankret af ^ ), eller indledes med et tegn, der ikke er A:

/(^|[^A])(AA)+G(GG)*TC/

Men bemærk, at med dette mønster vil et ekstra tegn blive fanget, hvis mønsteret ikke findes i starten af ​​strengen, så du bliver nødt til at skære det første tegn, hvis det ikke er et A.



  1. Brug af php til at eksportere en mysql-forespørgsel til en .csv-fil, der kan downloades

  2. ElasticSearch river JDBC MySQL sletter ikke poster

  3. Nem måde at generere en slug navn kolonne fra navn kolonnen?

  4. Databasedesign - Push Model, eller Fan-out-on-write