Ett jämnt antal A kan uttryckas som (AA)+
(en eller flera instanser av AA
; så det kommer att matcha AA, AAAA, AAAAAA...). Ett udda antal G kan uttryckas som G(GG)*
(ett G
följt av noll eller fler instanser av GG
, så det matchar G, GGG, GGGGG...).
Sätt ihop det och du har:
/(AA)+G(GG)*TC/
Men eftersom regexmotorer kommer att försöka matcha så mycket som möjligt, kommer detta uttryck faktiskt att matcha en delsträng av AAAGGGTC
(dvs. AAGGGTC
)! För att förhindra det kan du använda en negativ lookbehind
för att säkerställa att tecknet före det första A
är inte en annan A
:
/(?<!A)(AA)+G(GG)*TC/
...förutom att MySQL inte stöder lookarounds i deras regex.
Vad du istället kan göra är att ange att mönstret antingen börjar i början av strängen (förankrat av ^
), eller föregås av ett tecken som inte är A:
/(^|[^A])(AA)+G(GG)*TC/
Men observera att med det här mönstret kommer ett extra tecken att fångas om mönstret inte hittas i början av strängen så du måste skära av det första tecknet om det inte är ett A.