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

Come abbinare numeri pari di lettere o numeri dispari di lettere usando regexp per mysql

Un numero pari di A può essere espresso come (AA)+ (una o più istanze di AA; quindi corrisponderà ad AA, AAAA, AAAAAA...). Un numero dispari di G può essere espresso come G(GG)* (un G seguito da zero o più istanze di GG , quindi corrisponderà a G, GGG, GGGGG...).

Mettilo insieme e hai:

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

Tuttavia, poiché i motori regex cercheranno di corrispondere il più possibile, questa espressione corrisponderà effettivamente a una sottostringa di AAAGGGTC (es. AAGGGTC )! Per evitarlo, potresti utilizzare un lookbehind negativo per assicurarsi che il carattere prima della prima A non è un altro A :

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

...tranne che MySQL non supporta i lookaround nelle loro espressioni regolari.

Quello che puoi fare invece è specificare che il pattern inizi all'inizio della stringa (anchor per ^ ), oppure è preceduto da un carattere diverso da A:

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

Ma nota che con questo modello verrà catturato un carattere in più se il modello non viene trovato all'inizio della stringa, quindi dovrai tagliare il primo carattere se non è una A.