Mitä ovat säännölliset lausekkeet?
Säännölliset lausekkeet auttavat etsimään tietoja, jotka vastaavat monimutkaisia ehtoja. Tarkastelimme jokerimerkkejä edellisessä opetusohjelmassa. Jos olet aiemmin työskennellyt jokerimerkkien kanssa, saatat kysyä, miksi opit säännöllisiä lausekkeita, kun yleismerkkejä käyttämällä saat samanlaisia tuloksia. Koska jokerimerkkeihin verrattuna säännölliset lausekkeet antavat meille mahdollisuuden etsiä tietoja, jotka vastaavat vielä monimutkaisempia ehtoja.
Perussyntaksi
Säännöllisen lausekkeen perussyntaksi on seuraava
SELECT statements… WHERE fieldname REGEXP 'pattern';
TÄSTÄ -
- "SELECT-lauseet ..." on standardi SELECT-käsky
- "WHERE fieldname" on sen sarakkeen nimi, jolle säännöllinen lauseke suoritetaan.
- "REGEXP 'kuvio" " REGEXP on säännöllisen lausekkeen operaattori ja" kuvio "edustaa mallia, johon REGEXP sovittaa. RLIKE on REGEXP: n synonyymi ja saavuttaa samat tulokset kuin REGEXP. Jotta vältetään sekoittaminen LIKE-operaattoriin, on parempi käyttää REGEXP: ää .
Katsotaanpa nyt käytännön esimerkkiä-
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
Yllä oleva kysely etsii kaikkia elokuvien nimikkeitä, joissa on sanakoodi. Ei ole väliä onko "koodi" otsikon alussa, keskellä vai lopussa. Niin kauan kuin se sisältyy otsikkoon, se otetaan huomioon.
Oletetaan, että haluamme etsiä elokuvia, jotka alkavat a: lla, b: llä, c: llä tai d: llä, minkä jälkeen seuraa mikä tahansa määrä muita merkkejä, miten aiomme saavuttaa tämän. Voimme käyttää säännöllistä lauseketta yhdessä metamerkkien kanssa haluttujen tulosten saavuttamiseksi.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
Yllä olevan komentosarjan suorittaminen MySQL-työpöydällä 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ä olevaa tulosta vastaavaa säännöllistä lausekettamme.
'[abcd]' caret (^) tarkoittaa, että kuvion vastaavuutta tulisi soveltaa alussa ja charlist [abcd] tarkoittaa, että tulosjoukossa palautetaan vain a, b, c tai d alkavat elokuvien nimet.
Muokkaamme yllä olevaa komentosarjaa ja käytämme NOT-luetteloa ja katsotaan, mitä tuloksia saamme kyselyn suorittamisen jälkeen.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Yllä olevan komentosarjan suorittaminen MySQL-työpöydällä 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 yllä mainituista tuloksista vastuussa olevaa säännöllistä lausekettamme.
'[abcd]' caret (^) tarkoittaa, että kuvion vastaavuutta tulisi soveltaa alussa ja charlist [abcd] tarkoittaa, että elokuvanimikkeet, jotka alkavat jollakin oheisista hahmoista, suljetaan pois tulosjoukosta.
Säännöllisen lausekkeen metamerkit
Se, mitä tarkastelimme yllä olevassa esimerkissä, on säännöllisen lausekkeen yksinkertaisin muoto. Tarkastellaan nyt kehittyneempiä säännöllisen lausekkeen kuviot. Oletetaan, että haluamme etsiä elokuvan otsikoita, jotka alkavat kuviosta "koodi", vain säännöllisen lausekkeen avulla, miten menisimme siihen? Vastaus on metahahmoja. Niiden avulla voimme hienosäätää kuvahakutuloksiamme säännöllisten lausekkeiden avulla.
Hiiltyä | Kuvaus | Esimerkki | |
---|---|---|---|
* | Tähdellä (*) metamerkki käytetään sovittamaan nolla (0) tai enemmän tapauksia jouset sitä edeltävän | VALITSE * FROM-elokuvista WHERE otsikko REGEXP 'da *'; antaa kaikille elokuville, joissa on merkkejä "da" .Esimerkiksi Da Vinci Code, Daddy's Little Girls. | |
+ | Plus (+) metamerkki käytetään sovittamaan yhdessä tai useammassa erässä merkkijonojen sitä edeltävän. | VALITSE * FROM `elokuvista 'WHERE` otsikko `REGEXP' mon + '; antaa kaikille elokuville, jotka sisältävät merkkejä "ma" .Esimerkiksi "Enkelit ja demonit". | |
? | Kysymyksen (?) Metamerkkiä käytetään vastaamaan nollaa (0) tai yhtä sitä edeltävien merkkijonojen esiintymiä. | SELECT * FROM `categories` WHERE` category_name` REGEXP 'com?'; antaa kaikki luokat, jotka sisältävät merkkijonon com. Esimerkiksi komedia, romanttinen komedia. | |
. | Piste (.) Metamerkki käytetään vastaa yhtään yksittäistä merkkiä paitsi uuden rivin. | SELECT * FROM movies WHERE `vuosi_julkaistu` REGEXP '200.'; antaa kaikki vuosina julkaistut elokuvat merkillä "200" ja sen jälkeen minkä tahansa yksittäisen merkin. Esimerkiksi 2005, 2007, 2007 jne. | |
[abc] | Charlist [abc] käytetään vastaa mitään suljetun merkkiä. | VALITSE * FROM `elokuvista 'WHERE` otsikko `REGEXP' [vwxyz] '; antaa kaikki elokuvat, jotka sisältävät minkä tahansa yksittäisen merkin "vwxyz": ssä. Esimerkiksi X-Men, Da Vinci Code jne. | |
[abc] | Charlist [abc] käytetään vastaa mitään merkkiä eriä lukuun ottamatta suljettu. | VALITSE * FROM `elokuvista` WHERE `otsikko` REGEXP '[vwxyz]'; antaa kaikki elokuvat, jotka sisältävät muita merkkejä kuin "vwxyz" -elokuvassa. | |
[AZ] | [AZ] käytetään vastaa yhtään ison kirjaimen. | VALITSE * FROM `jäsenistä` WHERE` postin_osoite` REGEXP '[AZ]'; antaa kaikille jäsenille, joilla on postiosoite, joka sisältää minkä tahansa merkin A: sta Z: hen ... Esimerkiksi Janet Jones jäsenenumerolla 1. | |
[az] | [Az] käytetään vastaa yhtään kirjainta | VALITSE * FROM `jäsenistä` WHERE` postin_osoite` REGEXP '[az]'; antaa kaikille jäsenille, joilla on postiosoite, joka sisältää minkä tahansa merkin a: sta z: hen ... Esimerkiksi Janet Jones jäsenenumerolla 1. | |
[0-9] | [0-9] käytetään vastaamaan mitä tahansa luku 0 kautta 9. | VALITSE * FROM `jäsenistä 'Missä` kontakti_numero` REGEXP' [0-9] 'antaa kaikille jäsenille, jotka ovat lähettäneet yhteyshenkilönumeroita, jotka sisältävät merkkejä "[0-9]" .Esimerkiksi Robert Phil. | |
^ | Sirkumfleksi (^) käytetään aloittaa ottelu alkaa. | VALITSE * FROM `elokuvista` WHERE `otsikko` REGEXP '[cd]'; antaa kaikki elokuvat, joiden otsikko alkaa mistä tahansa CD: n hahmosta. Esimerkiksi Code Name Black, Daddy's Little Girls ja Da Vinci Code. | |
| | Pystypalkki (|) käytetään eristämään vaihtoehtoja. | VALITSE * FROM `elokuvista 'WHERE` otsikko `REGEXP' [cd] | [u] '; antaa kaikki elokuvat, joiden otsikko alkaa mistä tahansa CD: n tai "u": n merkistä. Esimerkiksi Code Name Black, Daddy's Little Girl, Da Vinci Code ja Underworld - Awakening. | |
[[: <:]] | [[: <:]] Vastaa alussa sanoja. | VALITSE * FROM `elokuvista 'WHERE` otsikko `REGEXP' [[: <:]] varten '; antaa kaikki elokuvat, joiden otsikot alkavat hahmoista. Esimerkiksi: Sarah Marshalin unohtaminen. | |
[[:>:]] | [[:>:]] Vastaa loppuun sanoja. | VALITSE * FROM `elokuvista 'WHERE` otsikko `REGEXP' ack [[:>:]] '; antaa kaikille elokuville otsikot, jotka päättyvät merkkeihin "ack" .Esimerkiksi koodinimi musta. | |
[: luokka:] | [: Luokka:] vastaa merkkiluokka eli [: alpha:] vastaamaan kirjeitä, [: space:] vastaamaan tyhjää tilaa, [: punct:] on pelattu välimerkkejä ja [: upper:] ylemmän luokan kirjeiden. | VALITSE * FROM `elokuvista` WHERE `otsikko` REGEXP '[: alpha:]'; antaa kaikille elokuville, joiden otsikot sisältävät vain kirjaimia. Esimerkiksi Sarah Marshalin unohtaminen, X-Men jne. Elokuva kuten Karibian merirosvot 4 jätetään pois tästä kyselystä. |
Takasuuntainen viiva (\) on tottunut pakomerkiksi. Jos haluamme käyttää sitä osana säännöllisen lausekkeen mallia, meidän tulisi käyttää kaksoisviivoja (\\)
Yhteenveto
- Säännölliset lausekkeet tarjoavat tehokkaan ja joustavan mallivastaavuuden, joka voi auttaa meitä toteuttamaan tehohakuapuohjelmia tietokantajärjestelmiin.
- REGEXP on operaattori, jota käytetään säännöllisten lausekkeiden haun suorittamisessa. RLIKE on synonyymi
- Säännölliset lausekkeet tukevat useita metamerkkejä, jotka mahdollistavat enemmän joustavuutta ja hallittavuutta kaavojen täsmäyksessä.
- Takaviivaa käytetään pakomerkkinä säännöllisissä lausekkeissa. Se otetaan huomioon vain kuvion ottelussa, jos kaksoisviivoja on käytetty.
- Säännölliset lausekkeet eivät eroa isoja ja pieniä kirjaimia.