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.