sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo haces coincidir números pares de letras o números impares de letras usando expresiones regulares para mysql?

Un número par de A se puede expresar como (AA)+ (una o más instancias de AA; por lo que coincidirá con AA, AAAA, AAAAAA...). Un número impar de G se puede expresar como G(GG)* (una G seguido de cero o más instancias de GG , por lo que coincidirá con G, GGG, GGGGG...).

Junte eso y obtendrá:

/(AA)+G(GG)*TC/

Sin embargo, dado que los motores de expresiones regulares intentarán coincidir tanto como sea posible, esta expresión en realidad coincidirá con una subcadena de AAAGGGTC (es decir, AAGGGTC )! Para evitar eso, puede usar un mirada negativa hacia atrás para asegurarse de que el carácter anterior a la primera A no es otra A :

/(?<!A)(AA)+G(GG)*TC/

...excepto que MySQL no admite búsquedas en sus expresiones regulares.

Lo que puede hacer en su lugar es especificar que el patrón comience al principio de la cadena (anchored por ^ ), o está precedido por un carácter que no es A:

/(^|[^A])(AA)+G(GG)*TC/

Pero tenga en cuenta que con este patrón se capturará un carácter adicional si el patrón no se encuentra al comienzo de la cadena, por lo que tendrá que eliminar el primer carácter si no es una A.