sql >> Databasteknik >  >> RDS >> Mysql

MySQL REGEXP ordgränser [[:<:]] [[:>:]] och dubbla citattecken

Låt mig citera dokumentationen först:

Från dokumentationen kan vi se orsaken bakom ditt problem och det orsakas inte av någon som helst flykt. Problemet är att du försöker matcha ordgränsen [[:<:]] precis i början av strängen vilket inte fungerar eftersom en ordgräns som du kan se i dokumentationen skiljer ett ordtecken från ett icke-ordstecken, men i ditt fall är det första tecknet en " som inte är ett ordtecken så det finns ingen ordgräns, detsamma gäller för den sista " och [[:>:]] .

För att detta ska fungera måste du ändra ditt uttryck lite till detta:

"[[:<:]]word[[:>:]]"
 ^^^^^^^    ^^^^^^^

Lägg märke till hur ordgränsen separerar ett icke-ordstecken " från ett ordtecken w i början och en " från d i slutet av strängen.

EDIT: Om du alltid vill använda en ordgräns i början och slutet av strängen utan att veta om det kommer att finnas en faktisk gräns kan du använda följande uttryck:

([[:<:]]|^)"word"([[:>:]]|$)

Detta kommer antingen att matcha en ordgräns i början eller början av strängen ^ och samma sak för slutet av ordet gräns eller slutet av strängen. Jag råder dig verkligen att studera data du försöker matcha och leta efter vanliga mönster och inte använda reguljära uttryck om de inte är rätt verktyg för jobbet.

SQL Fiddle Demo



  1. Hur man skapar en fråga i Drupal 8

  2. Skicka variabelvärde från JS till PHP

  3. Heroku Postgres Fel:PGError:ERROR:relationsorganisationer finns inte (ActiveRecord::StatementInvalid)

  4. Hur man ställer in ett standardvärde för en befintlig kolumn