Un nombre pair de A peut être exprimé sous la forme (AA)+
(une ou plusieurs instances de AA
; il correspondra donc à AA, AAAA, AAAAAA...). Un nombre impair de G peut être exprimé par G(GG)*
(un G
suivi de zéro ou plusieurs instances de GG
, donc cela correspondra à G, GGG, GGGGG...).
Mettez cela ensemble et vous avez :
/(AA)+G(GG)*TC/
Cependant, étant donné que les moteurs de regex essaieront de correspondre autant que possible, cette expression correspondra en fait à une sous-chaîne de AAAGGGTC
(c'est-à-dire AAGGGTC
) ! Afin d'éviter cela, vous pouvez utiliser un negative lookbehind
pour s'assurer que le caractère avant le premier A
n'est pas un autre A
:
/(?<!A)(AA)+G(GG)*TC/
...sauf que MySQL ne prend pas en charge les lookarounds dans leurs regex.
Ce que vous pouvez faire à la place est de spécifier que le modèle commence soit au début de la chaîne (anchored par ^
), ou est précédé d'un caractère qui n'est pas A :
/(^|[^A])(AA)+G(GG)*TC/
Mais notez qu'avec ce modèle, un caractère supplémentaire sera capturé si le modèle n'est pas trouvé au début de la chaîne, vous devrez donc couper le premier caractère si ce n'est pas un A.