Een even aantal A's kan worden uitgedrukt als (AA)+
(een of meer exemplaren van AA
; dus het komt overeen met AA, AAAA, AAAAAA...). Een oneven aantal G's kan worden uitgedrukt als G(GG)*
(één G
gevolgd door nul of meer exemplaren van GG
, dus dat komt overeen met G, GGG, GGGGG...).
Voeg dat samen en je hebt:
/(AA)+G(GG)*TC/
Aangezien regex-engines echter zoveel mogelijk proberen overeen te komen, komt deze uitdrukking in feite overeen met een subtekenreeks van AAAGGGTC
(bijv. AAGGGTC
)! Om dat te voorkomen, kunt u een negatieve lookbehind
gebruiken om ervoor te zorgen dat het teken voor de eerste A
is niet een andere A
:
/(?<!A)(AA)+G(GG)*TC/
...behalve dat MySQL zoekronden in hun regexes niet ondersteunt.
Wat u in plaats daarvan kunt doen, is specificeren dat het patroon ofwel aan het begin van de tekenreeks begint (verankerd door ^
), of wordt voorafgegaan door een teken dat geen A is:
/(^|[^A])(AA)+G(GG)*TC/
Houd er echter rekening mee dat met dit patroon een extra teken wordt vastgelegd als het patroon niet aan het begin van de tekenreeks wordt gevonden, dus u moet het eerste teken weghakken als het geen A is.