2011-04-07 9 views

risposta

22

Un numero pari di A di può essere espressa come (AA)+ (una o più un'istanza di AA, così che sarà abbinare AA, AAAA, AAAAAA ...). Un numero dispari di G può essere espresso come G(GG)* (uno G seguito da zero o più istanze di GG, in modo che corrisponda a G, GGG, GGGGG ...).

Metti che insieme e hai:

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

Tuttavia, dal momento che i motori di regex cercheranno di far corrispondere il più possibile, questa espressione sarà effettivamente corrispondere a una stringa di AAAGGGTC (cioè AAGGGTC.)! Al fine di evitare che, si potrebbe usare un negative lookbehind al fine di garantire che il carattere prima del primo A non è un altro A:

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

... tranne che MySQL non supporta lookarounds nelle loro espressioni regolari.

Che cosa si può fare, invece è specificare che il modello sia parte dall'inizio della stringa (anchored da ^), o è preceduto da un carattere che non è A:

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

Ma si noti che con questo pattern un personaggio in più verrà catturato se il pattern non viene trovato all'inizio della stringa quindi dovrai tagliare il primo carattere se non è un A.

1

Si può forse provare qualcosa di simile (AA) * (GG) * GTC

Penso che sarebbe fare il trucco. Non so se c'è una sintassi speciale per mysql se

+0

non ha funzionato per me come ho fatto qualcosa in questo modo testarlo se restituisce false per me – thunderb0lt

+0

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

Problemi correlati