Parzystą liczbę A można wyrazić jako (AA)+
(jedna lub więcej instancji AA
; więc będzie pasować do AA, AAAA, AAAAAA...). Nieparzystą liczbę G można wyrazić jako G(GG)*
(jeden G
po którym następuje zero lub więcej wystąpień GG
, więc będzie to pasować do G, GGG, GGGGG...).
Połącz to i masz:
/(AA)+G(GG)*TC/
Ponieważ jednak silniki regex będą próbowały dopasować jak najwięcej, to wyrażenie będzie pasować do podłańcucha AAAGGGTC
(np. AAGGGTC
)! Aby temu zapobiec, możesz użyć negatywnego spojrzenia w tył
aby upewnić się, że znak przed pierwszym A
nie jest kolejnym A
:
/(?<!A)(AA)+G(GG)*TC/
...z wyjątkiem tego, że MySQL nie obsługuje obejść w swoich wyrażeniach regularnych.
Zamiast tego możesz określić, że wzorzec albo zaczyna się na początku ciągu (zakotwiczony przez ^
) lub jest poprzedzony znakiem, który nie jest A:
/(^|[^A])(AA)+G(GG)*TC/
Pamiętaj jednak, że w przypadku tego wzorca zostanie przechwycony dodatkowy znak, jeśli wzorzec nie zostanie znaleziony na początku ciągu, więc będziesz musiał obciąć pierwszy znak, jeśli nie jest to A.