2011-04-07 40 views

Respuesta

22

Un número par de Atléticos se puede expresar como (AA)+ (uno o más instancia de AA; por lo que va coincide con AA, AAAA, AAAAAA ...). Un número impar de G se puede expresar como G(GG)* (un G seguido de cero o más instancias de GG, por lo que coincidirá con G, GGG, GGGGG ...).

Put que juntos y usted tiene:

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

Sin embargo, ya que los motores de expresiones regulares trata de hacer coincidir tanto como sea posible, esta expresión se representa realmente a una subcadena de AAAGGGTC (es decir AAGGGTC.)! Con el fin de evitarlo, se puede utilizar un negative lookbehind para asegurar que el personaje antes de la primera A no es otra A:

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

... excepto que MySQL no soporta lookarounds en sus expresiones regulares.

Lo que puede hacer en su lugar es especificar que el motivo sea comienza al principio de la cadena (anchored por ^), o es precedido por un carácter que no sea R:

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

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

1

Puede tal vez intentar algo así como (AA) * (GG) * GTC

Creo que sería hacer el truco. No sé si hay una sintaxis especial para MySQL aunque

+0

no funcionó para mí ya que hice algo así para probarlo si me devuelve falso – thunderb0lt

+0

seleccione 'AAAAAGGGGGTCA' regexp '(AA) * (GG) * G'; – thunderb0lt

Cuestiones relacionadas