Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie passen Sie gerade Zahlen von Buchstaben oder ungerade Zahlen von Buchstaben mit regexp für mysql an

Eine gerade Anzahl von A's kann als (AA)+ ausgedrückt werden (eine oder mehrere Instanzen von AA; also passt es zu AA, AAAA, AAAAAA...). Eine ungerade Anzahl von Gs kann als G(GG)* ausgedrückt werden (ein G gefolgt von null oder mehr Instanzen von GG , das passt also zu G, GGG, GGGGG...).

Setzen Sie das zusammen und Sie haben:

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

Da Regex-Engines jedoch versuchen, so viele Übereinstimmungen wie möglich zu finden, stimmt dieser Ausdruck tatsächlich mit einer Teilzeichenfolge von AAAGGGTC überein (dh AAGGGTC )! Um das zu verhindern, könnten Sie einen negatives Lookbehind verwenden um sicherzustellen, dass das Zeichen vor dem ersten A ist kein weiteres A :

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

...außer dass MySQL Lookarounds in ihren regulären Ausdrücken nicht unterstützt.

Stattdessen können Sie festlegen, dass das Muster entweder am Anfang der Zeichenfolge beginnt (anchored durch ^ ) oder ein Zeichen vorangestellt ist, das nicht A:

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

Beachten Sie jedoch, dass bei diesem Muster ein zusätzliches Zeichen erfasst wird, wenn das Muster nicht am Anfang der Zeichenfolge gefunden wird, sodass Sie das erste Zeichen abschneiden müssen, wenn es kein A ist.