sql >> Database teknologi >  >> RDS >> Mysql

MySQL REGEXP ordgrænser [[:<:]] [[:>:]] og dobbelte anførselstegn

Lad mig citere dokumentationen først:

Fra dokumentationen kan vi se årsagen bag dit problem, og det er ikke forårsaget af at undslippe overhovedet. Problemet er, at du prøver at matche ordgrænsen [[:<:]] lige i begyndelsen af ​​strengen, hvilket ikke virker, fordi en ordgrænse, som du kan se i dokumentationen, adskiller et ordtegn fra et ikke-ordtegn, men i dit tilfælde er det første tegn en " som ikke er et ordtegn, så der er ingen ordgrænse, det samme gælder for den sidste " og [[:>:]] .

For at dette skal virke, skal du ændre dit udtryk lidt til dette:

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

Bemærk, hvordan ordgrænsen adskiller et ikke-ord-tegn " fra et ordtegn w i begyndelsen og en " fra d i slutningen af ​​strengen.

EDIT: Hvis du altid vil bruge en ordgrænse i begyndelsen og slutningen af ​​strengen uden at vide, om der vil være en egentlig grænse, kan du bruge følgende udtryk:

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

Dette vil enten matche en ordgrænse i begyndelsen eller start-of-strengen ^ og det samme for slutningen af ​​ordet grænse eller ende af streng. Jeg anbefaler dig virkelig at studere de data, du forsøger at matche, og se efter almindelige mønstre og ikke bruge regulære udtryk, hvis de ikke er det rigtige værktøj til jobbet.

SQL Fiddle Demo



  1. mysql fejl 1364 Feltet har ikke en standardværdi

  2. mysql_insert_id alternativ til postgresql

  3. Hvad betyder et (+)-tegn i en Oracle SQL WHERE-sætning?

  4. Hvordan filtrerede indekser kunne være en mere kraftfuld funktion