MYSQL-säännölliset lausekkeet (REGEXP) syntaksilla ja esimerkeillä
Mitä ovat säännölliset lausekkeet?
Säännölliset lausekkeet auttavat etsimään monimutkaisia ehtoja vastaavia tietoja. Tarkastelimme jokerimerkkejä edellisessä opetusohjelmassa. Jos olet työskennellyt jokerimerkkien kanssa aiemmin, saatat kysyä, miksi oppia säännöllisiä lausekkeita, kun voit saada samanlaisia tuloksia käyttämällä yleismerkkejä. Koska jokerimerkkeihin verrattuna säännöllisten lausekkeiden avulla voimme etsiä vieläkin monimutkaisempia ehtoja vastaavia tietoja.
Perussyntaksi
Säännöllisen lausekkeen perussyntaksi on seuraava
SELECT statements... WHERE fieldname REGEXP 'pattern';
TÄÄLLÄ -
- "VALITSE lausunnot…" on standardi SELECT-lause
- "WHERE-kentän nimi" on sen sarakkeen nimi, jolle säännöllinen lauseke suoritetaan.
- "REGEXP-kuvio" REGEXP on säännöllisen lausekkeen operaattori, ja 'kuvio' edustaa kuviota, jota REGEXP vastaa. RLIKE on synonyymi sanalle REGEXP ja saavuttaa samat tulokset kuin REGEXP. Jotta sitä ei sekoitettaisi LIKE-operaattoriin, se parempi käyttää REGEXP:tä sen sijaan.
Katsotaanpa nyt käytännön esimerkkiä -
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
Yllä oleva kysely etsii kaikkia elokuvien nimikkeitä, joissa on sanakoodi. Sillä ei ole väliä, onko "koodi" otsikon alussa, keskellä vai lopussa. Niin kauan kuin se sisältyy otsikkoon, sitä harkitaan.
Oletetaan, että haluamme etsiä elokuvia, jotka alkavat a:lla, b:llä, c:llä tai d:llä ja joita seuraa mikä tahansa määrä muita hahmoja, miten aiomme saavuttaa sen. Voimme käyttää säännöllistä lauseketta yhdessä metamerkkien kanssa saavuttaaksemme halutut tulokset.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
Suoritetaan yllä oleva komentosarja MySQL työpöytä myflixdb:tä vastaan antaa meille seuraavat tulokset.
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 |
Tarkastellaan nyt tarkasti yllä olevasta tuloksesta vastaavaa säännöllistä lauseketta.
'^[abcd]' caret (^) tarkoittaa, että kaavavastaavuus tulee käyttää alussa ja charlist [abcd] tarkoittaa, että vain elokuvan otsikot, jotka alkavat kirjaimella a, b, c tai d, palautetaan tulosjoukkoon.
Muokataan yllä olevaa skriptiämme ja käytämme NOT charlistia ja katsotaan mitä tuloksia saamme kyselymme suorittamisen jälkeen.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Suoritetaan yllä oleva komentosarja MySQL työpenkki myflixdb:tä vastaan antaa meille seuraavat tulokset.
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 |
Tarkastellaan nyt tarkasti säännöllistä lausekettamme, joka vastaa yllä olevista tuloksista.
'^[^abcd]' caret (^) tarkoittaa, että kaavaosuma tulee käyttää alussa ja merkkiluettelo [^abcd] tarkoittaa, että elokuvan nimet, jotka alkavat millä tahansa mukana olevilla hahmoilla, jätetään tulosjoukon ulkopuolelle.
Säännöllisen lausekkeen metamerkit
Mitä tarkastelimme yllä olevassa esimerkissä, on säännöllisen lausekkeen yksinkertaisin muoto. Tarkastellaan nyt edistyneempiä säännöllisten lausekkeiden malliosumia. Oletetaan, että haluamme etsiä elokuvien nimiä, jotka alkavat "koodilla" käyttämällä vain säännöllistä lauseketta, miten toimisimme? Vastaus on metahahmot. Niiden avulla voimme hienosäätää kuviohakutuloksiamme säännöllisten lausekkeiden avulla.
Char | Tuotetiedot | esimerkki | |
---|---|---|---|
* | - tähti (*) metamerkkiä käytetään vastaamaan nollaa (0) tai useampaa sitä edeltävien merkkijonojen esiintymää | SELECT * FROM elokuvista WHERE nimi REGEXP 'da*'; antaa kaikki elokuvat, jotka sisältävät hahmoja "da" .Esimerkiksi Da Vinci Code , Daddy's Little Girls. | |
+ | - lisää (+) metamerkkiä käytetään vastaamaan yhtä tai useampaa sitä edeltävää merkkijonoa. | SELECT * FROM `elokuvista` WHERE `nimi` REGEXP 'mon+'; antaa kaikille elokuville, jotka sisältävät hahmoja "mon" .Esimerkiksi Enkelit ja Demonit. | |
? | Kysymys(?) metamerkkiä käytetään vastaamaan nollaa (0) tai yhtä esiintymää sitä edeltävistä merkkijonoista. | SELECT * FROM `categories` WHERE `kategorian_nimi` REGEXP 'com?'; antaa kaikki luokat, jotka sisältävät merkkijonon com .Esimerkiksi komedia , romanttinen komedia . | |
. | - piste (.) metamerkkiä käytetään vastaamaan mitä tahansa yksittäistä merkkiä uutta riviä lukuun ottamatta. | SELECT * FROM elokuvista WHERE `year_released` REGEXP '200.'; antaa kaikki vuosina julkaistut elokuvat, jotka alkavat hahmoilla "200", jota seuraa mikä tahansa yksittäinen hahmo. Esimerkiksi 2005,2007,2008 jne. | |
[Abc] | - charlist [abc] käytetään vastaamaan mitä tahansa mukana olevista merkeistä. | SELECT * FROM `elokuvista` WHERE `nimi` REGEXP '[vwxyz]'; antaa kaikki elokuvat, jotka sisältävät yhden hahmon "vwxyz" -muodossa. Esimerkiksi X-Men, Da Vinci Code jne. | |
[^ Abc] | - charlist [^abc] käytetään vastaamaan kaikkia merkkejä, lukuun ottamatta mukana olevia merkkejä. | SELECT * FROM `elokuvista` WHERE `nimi` REGEXP '^[^vwxyz]'; antaa kaikki elokuvat, jotka sisältävät muita hahmoja kuin "vwxyz". | |
[AZ] | - [AZ] käytetään vastaamaan mitä tahansa isoa kirjainta. | SELECT * FROM `jäsenet` WHERE `postiosoite` REGEXP '[AZ]'; antaa kaikille jäsenille, joilla on postiosoite, joka sisältää minkä tahansa merkin A:sta Z:hen. Esimerkiksi Janet Jones, jonka jäsennumero on 1. | |
[Az] | - [Az] käytetään vastaamaan mitä tahansa pientä kirjainta | SELECT * FROM `jäsenet` WHERE `postiosoite` REGEXP '[az]'; antaa kaikille jäsenille, joiden postiosoitteet sisältävät minkä tahansa merkin a:sta z:hen. .Esimerkiksi Janet Jones, jonka jäsennumero on 1. | |
[0-9] | - [0-9] käytetään vastaamaan mitä tahansa numeroa 0 - 9. | SELECT * FROM "jäsenet" WHERE "yhteysnumero" REGEXP "[0-9]" antaa kaikille jäsenille, jotka ovat lähettäneet yhteystiedot, jotka sisältävät merkkejä "[0-9]". Esimerkiksi Robert Phil. | |
^ | - huolenpito (^) käytetään ottelun aloittamiseen alusta. | SELECT * FROM `elokuvista` WHERE `nimi` REGEXP '^[cd]'; antaa kaikki elokuvat, joiden otsikko alkaa millä tahansa "cd:n" hahmolla. Esimerkiksi koodinimi Black, Daddy's Little Girls ja Da Vinci Code. | |
| | - pystypalkki (|) käytetään eristämään vaihtoehtoja. | SELECT * FROM `elokuvista` WHERE `nimi` REGEXP '^[cd]|^[u]'; antaa kaikki elokuvat, joiden otsikko alkaa millä tahansa "cd"- tai "u"-hahmolla. Esimerkiksi koodinimi Black, Daddy's Little Girl, Da Vinci Code ja Underworld – Awakenden. | |
[[:<:]] | -[[:<:]] vastaa sanojen alkua. | SELECT * FROM `elokuvista` WHERE `nimi` REGEXP '[[:<:]]for';
antaa kaikki elokuvat, joiden otsikot alkavat hahmoista. Esimerkiksi: Sarah Marshalin unohtaminen. |
|
[[:>:]] | - [[:>:]] vastaa sanojen loppua. | SELECT * FROM `elokuvista` WHERE `nimi` REGEXP 'ack[[:>:]]';
antaa kaikki elokuvat, joiden otsikot päättyvät hahmoihin "ack" .Esimerkiksi koodinimi musta. |
|
[:luokka:] | - [:luokka:] vastaa merkkiluokkaa eli
[:alpha:] sovittaa kirjaimet yhteen, [:välilyönti:] vastaamaan tyhjää tilaa, [:kohta:] vastaa välimerkkejä ja [:upper:] yläluokan kirjaimia varten. |
SELECT * FROM `elokuvista` WHERE `nimi` REGEXP '[:alpha:]';
antaa kaikki elokuvat, joiden otsikot sisältävät vain kirjaimia Esimerkiksi Sarah Marshalin unohtaminen, X-Men jne. Elokuva, kuten Pirates of the Caribbean 4, jätetään pois tästä kyselystä. |
Kenoviivaa (\) käytetään estomerkkinä. Jos haluamme käyttää sitä osana kuviota säännöllisessä lausekkeessa, meidän tulee käyttää kaksoiskenoviivaa (\\)
Yhteenveto
- Säännölliset lausekkeet tarjoavat tehokkaan ja joustavan kaavavastaavuuden, joka voi auttaa meitä toteuttamaan tehohakuapuohjelmia tietokantajärjestelmiimme.
- REGEXP on operaattori, jota käytetään suoritettaessa säännöllisten lausekkeiden kaavoja. RLIKE on synonyymi
- Säännölliset lausekkeet tukevat useita metamerkkejä, jotka mahdollistavat enemmän joustavuutta ja hallintaa suoritettaessa kaavaosumia.
- Kenoviivaa käytetään pakomerkkinä säännöllisissä lausekkeissa. Se huomioidaan vain kaavoissa, jos kaksinkertaista kenoviivaa on käytetty.
- Säännölliset lausekkeet eivät ole kirjainkokoisia.