sql >> Database >  >> RDS >> Mysql

Hoe match je even letters of oneven letters met regexp voor mysql

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.



  1. Verwijder sql-rijen waar ID's geen overeenkomst hebben uit een andere tabel

  2. MySQL LOAD_FILE() laadt null-waarden

  3. Een ontwikkelomgeving opzetten om PL/SQL te leren

  4. PDO doorlussen en fetchAll afdrukken