sql >> Databasteknik >  >> RDS >> Mysql

Hur matchar du jämna siffror på bokstäver eller udda siffror med hjälp av regexp för mysql

Ett jämnt antal A kan uttryckas som (AA)+ (en eller flera instanser av AA; så det kommer att matcha AA, AAAA, AAAAAA...). Ett udda antal G kan uttryckas som G(GG)* (ett G följt av noll eller fler instanser av GG , så det matchar G, GGG, GGGGG...).

Sätt ihop det och du har:

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

Men eftersom regexmotorer kommer att försöka matcha så mycket som möjligt, kommer detta uttryck faktiskt att matcha en delsträng av AAAGGGTC (dvs. AAGGGTC )! För att förhindra det kan du använda en negativ lookbehind för att säkerställa att tecknet före det första A är inte en annan A :

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

...förutom att MySQL inte stöder lookarounds i deras regex.

Vad du istället kan göra är att ange att mönstret antingen börjar i början av strängen (förankrat av ^ ), eller föregås av ett tecken som inte är A:

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

Men observera att med det här mönstret kommer ett extra tecken att fångas om mönstret inte hittas i början av strängen så du måste skära av det första tecknet om det inte är ett A.



  1. MySql välj format, rund kolumn

  2. Nya funktioner i SQL Server 2017 (databasmotor)

  3. MySQL - Problem med att skapa användardefinierad funktion (UDF)

  4. MySQL startar inte