Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment faites-vous correspondre des nombres pairs de lettres ou des nombres impairs de lettres en utilisant regexp pour mysql

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.