MYSQL reguliere expressies (REGEXP) met syntaxis en voorbeelden

Wat zijn reguliere expressies?

Reguliere expressies helpen bij het zoeken naar gegevens die overeenkomen met complex criteria. In de vorige zelfstudie hebben we naar jokertekens gekeken. Als u eerder met jokertekens hebt gewerkt, vraagt ​​u zich misschien af ​​waarom u reguliere expressies zou leren als u vergelijkbare resultaten kunt krijgen met behulp van de jokertekens. Omdat reguliere expressies ons, vergeleken met wildcards, in staat stellen om nog meer gegevens te zoeken die overeenkomen met complex criterium.

Basissyntaxis

De basissyntaxis voor een reguliere expressie is als volgt

SELECT statements... WHERE fieldname REGEXP 'pattern';

HIER -

  • "SELECT-instructies..." is de standaard SELECT-instructie
  • “WHERE veldnaam” is de naam van de kolom waarop de reguliere expressie moet worden uitgevoerd.
  • “REGEXP 'patroon'” REGEXP is de reguliere expressie-operator en 'patroon' vertegenwoordigt het patroon dat door REGEXP moet worden geëvenaard. RLIKE is de synoniem voor REGEXP en behaalt dezelfde resultaten als REGEXP. Om verwarring met de LIKE-operator te voorkomen, wordt it het is beter om REGEXP te gebruiken gebruiken.

Laten we nu naar een praktisch voorbeeld kijken:

SELECT * FROM `movies` WHERE `title` REGEXP 'code';

De bovenstaande zoekopdracht zoekt naar alle filmtitels die de woordcode bevatten. Het maakt niet uit of de “code” aan het begin, midden of einde van de titel staat. Zolang het in de titel staat, wordt het in overweging genomen.

Stel dat we willen zoeken naar films die beginnen met a, b, c of d , gevolgd door een willekeurig aantal andere karakters. Hoe zouden we dat dan kunnen bereiken? We kunnen een reguliere expressie samen met de metatekens gebruiken om de gewenste resultaten te bereiken.

SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';

Voer het bovenstaande script uit in MySQL-werkbank tegen de myflixdb geeft ons de volgende informatiewing resultaten.

movie_id title director year_released category_id
4 Code Name Black Edgar Jimz 2010 NULL
5 Daddy's Little Girls NULL 2007 8
6 Angels and Demons NULL 2007 6
7 Davinci Code NULL 2007 6

Laten we nu eens goed kijken naar onze reguliere expressie die verantwoordelijk is voor het bovenstaande resultaat.

'^[abcd]' de caret (^) betekent dat de patroonovereenkomst aan het begin moet worden toegepast en de charlist [abcd] betekent dat alleen filmtitels die beginnen met a, b, c of d in onze resultatenset worden geretourneerd.

Laten we ons bovenstaande script aanpassen en de NOT charlist gebruiken en kijken welke resultaten we krijgen na het uitvoeren van onze query.

SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';

Het uitvoeren van het bovenstaande script in MySQL-workbench tegen de myflixdb geeft ons het volgendewing resultaten.

movie_id title director year_released category_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2
3 X-Men 2008
9 Honey mooners John Schultz 2005 8
16 67% Guilty 2012
17 The Great Dictator Chalie Chaplie 1920 7
18 sample movie Anonymous 8
19 movie 3 John Brown 1920 8

Laten we nu eens goed kijken naar onze reguliere expressie die verantwoordelijk is voor de bovenstaande resultaten.

'^[^abcd]' de caret (^) betekent dat de patroonovereenkomst aan het begin moet worden toegepast en de charlist [^abcd] betekent dat de filmtitels die beginnen met een van de ingesloten tekens, worden uitgesloten van de resultatenset.

Metatekens voor reguliere expressies

Waar we in het bovenstaande voorbeeld naar hebben gekeken, is de eenvoudigste vorm van een reguliere expressie. Laten we nu eens kijken naar meer geavanceerde patroonovereenkomsten voor reguliere expressies. Stel dat we alleen met behulp van een reguliere expressie naar filmtitels willen zoeken die beginnen met het patroon 'code', hoe zouden we dat dan aanpakken? Het antwoord is metakarakters. Ze stellen ons in staat onze patroonzoekresultaten te verfijnen met behulp van reguliere expressies.

Verkolen Omschrijving Voorbeeld
* Het sterretje (*) metateken wordt gebruikt om nul (0) of meer exemplaren van de daaraan voorafgaande tekenreeksen te matchen SELECTEER * UIT films WAAR titel REGEXP 'da*'; geeft alle films met karakters “da” weer. Bijvoorbeeld Da Vinci Code, Daddy's Little Girls.
+ Het meer (+) metakarakter wordt gebruikt om een ​​of meer exemplaren van tekenreeksen die eraan voorafgaan, te matchen. SELECTEER * UIT `films` WAAR `titel` REGEXP 'mon+'; geeft alle films met karakters “mon” weer. Bijvoorbeeld engelen en demonen.
? De vraag(?) metakarakter wordt gebruikt om nul (0) of één instantie van de voorgaande strings te matchen. SELECT * VAN `categorieën` WAAR `categorie_naam` REGEXP 'com?'; geeft alle categorieën die string com bevatten. Bijvoorbeeld komedie, romantische komedie.
. Het punt (.) metateken wordt gebruikt om elk enkel teken te matchen, met uitzondering van een nieuwe regel. SELECT * UIT films WAAR `year_released` REGEXP '200.'; geeft alle films weer die in de loop der jaren zijn uitgebracht, beginnend met de tekens “200”, gevolgd door een enkel teken. Bijvoorbeeld 2005,2007,2008 enz.
[abc] Het Charlist [abc] wordt gebruikt om overeen te komen met een van de ingesloten tekens. SELECTEER * UIT `films` WAAR `titel` REGEXP '[vwxyz]'; geeft alle films weer die een enkel personage in "vwxyz" bevatten. Bijvoorbeeld X-Men, Da Vinci Code, enz.
[^ abc] Het Charlist [^abc] wordt gebruikt om alle tekens te matchen, met uitzondering van de ingesloten tekens. SELECT * VAN `films` WAAR `titel` REGEXP '^[^vwxyz]'; geeft alle films weer die andere karakters bevatten dan die in “vwxyz”.
[AZ] Het [AZ] wordt gebruikt om elke hoofdletter aan te passen. SELECT * VAN `leden` ​​WAAR `postadres` REGEXP '[AZ]'; geeft alle leden met een postadres met een teken van A tot Z. Bijvoorbeeld Janet Jones met lidmaatschapsnummer 1.
[az] Het [az] wordt gebruikt om met elke kleine letter overeen te komen SELECT * VAN `leden` ​​WAAR `postadres` REGEXP '[az]'; geeft alle leden die een postadres hebben met een teken van a tot z. .Bijvoorbeeld Janet Jones met lidmaatschapsnummer 1.
[0-9] Het [0-9] wordt gebruikt om elk cijfer van 0 tot en met 9 te matchen. SELECT * FROM `leden` ​​WHERE `contactnummer` REGEXP '[0-9]' geeft alle leden die contactnummers hebben ingediend met de tekens “[0-9]”. Bijvoorbeeld Robert Phil.
^ Het dakje (^) wordt gebruikt om de wedstrijd bij het begin te starten. SELECT * VAN `films` WAAR `titel` REGEXP '^[cd]'; geeft alle films waarvan de titel begint met een van de karakters in “cd”. Bijvoorbeeld Codenaam Zwart, Daddy's Little Girls en Da Vinci Code.
| Het verticale balk (|) wordt gebruikt om alternatieven te isoleren. SELECT * VAN `films` WAAR `titel` REGEXP '^[cd]|^[u]'; geeft alle films weer waarvan de titel begint met een van de tekens in “cd” of “u”. Bijvoorbeeld Codenaam Zwart, Papa's kleine meisje, Da Vinci Code en Underworld – Awakening.
[[:<:]] Het[[:<:]] komt overeen met het begin van woorden. SELECT * VAN `films` WAAR `titel` REGEXP '[[:<:]]voor';

geeft alle films met titels die beginnen met de personages. Bijvoorbeeld: Sarah Marshal vergeten.

[[:>:]] Het [[:>:]] komt overeen met het einde van woorden. SELECT * VAN `films` WAAR `titel` REGEXP 'ack[[:>:]]';

geeft alle films weer waarvan de titel eindigt met de karakters “ack”

.Bijvoorbeeld codenaam Zwart.

[:klas:] Het [:klas:] komt overeen met een karakterklasse, dwz

[:alfa:] letters matchen, [:ruimte:] om de witte ruimte aan te passen, [:punt:] is overeenkomende leestekens en [:upper:] voor letters uit de hogere klasse.

SELECTEER * UIT `films` WAAR `titel` REGEXP '[:alpha:]';

geeft aan dat alle films met titels alleen letters bevatten

.Bijvoorbeeld het vergeten van Sarah Marshal, X-Men enz.

Films als Pirates of the Caribbean 4 worden bij deze zoekopdracht weggelaten.

De backslash (\) wordt gebruikt als escape-teken. Als we het willen gebruiken als onderdeel van het patroon in een reguliere expressie, moeten we dubbele backslashes (\\) gebruiken

Samengevat

  • Reguliere expressies bieden een krachtige en flexibele patroonmatch die ons kan helpen bij het implementeren van krachtige zoekprogramma's voor onze databasesystemen.
  • REGEXP is de operator die wordt gebruikt bij het uitvoeren van overeenkomsten met reguliere expressiepatronen. RLIKE is het synoniem
  • Reguliere expressies ondersteunen een aantal metatekens die meer flexibiliteit en controle mogelijk maken bij het uitvoeren van patroonovereenkomsten.
  • De backslash wordt gebruikt als escape-teken in reguliere expressies. Er wordt alleen rekening mee gehouden in de patroonovereenkomst als er dubbele backslashes zijn gebruikt.
  • Reguliere expressies zijn niet hoofdlettergevoelig.