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.