„MYSQL“ reguliariosios išraiškos (REGEXP) su sintakse ir Pavyzdžiai

Anonim

Kas yra reguliarūs posakiai?

Reguliariosios išraiškos padeda ieškoti duomenų, kurie atitinka sudėtingus kriterijus. Ankstesnėje pamokoje pažvelgėme į pakaitos simbolius. Jei anksčiau dirbote su pakaitomis, galite paklausti, kodėl mokykitės reguliarių posakių, kai naudodami pakaitos simbolius galite gauti panašių rezultatų. Nes, palyginti su pakaitomis, reguliarūs posakiai leidžia mums ieškoti duomenų, atitinkančių dar sudėtingesnį kriterijų.

Pagrindinė sintaksė

Pagrindinė reguliaraus reiškinio sintaksė yra tokia

SELECT statements… WHERE fieldname REGEXP 'pattern';

ČIA -

  • "SELECT teiginiai ..." yra standartinis SELECT sakinys
  • „WHERE fieldname“ yra stulpelio, kuriame turi būti atliekama reguliarioji išraiška, pavadinimas.
  • "REGEXP 'šablonas'" REGEXP yra reguliariosios išraiškos operatorius, o 'šablonas' reiškia šabloną, kurį turi atitikti REGEXP. RLIKE yra REGEXP sinonimas ir pasiekia tuos pačius rezultatus kaip REGEXP. Kad nebūtų painiojama su LIKE operatoriumi, geriau naudoti REGEXP .

Pažvelkime į praktinį pavyzdį-

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

Pirmiau pateiktoje užklausoje ieškoma visų filmų pavadinimų, kuriuose yra žodžio kodas. Nesvarbu, ar „kodas“ yra pavadinimo pradžioje, viduryje ar pabaigoje. Tol, kol jis yra pavadinime, jis bus svarstomas.

Tarkime, kad norime ieškoti filmų, prasidedančių a, b, c arba d, po kurių eina bet koks skaičius kitų simbolių, kaip mes tai pasiektume. Norint pasiekti norimų rezultatų, mes galime naudoti reguliarųjį posakį kartu su metafaktais.

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

Minėto scenarijaus vykdymas „MySQL“ darbastalyje prieš „myflixdb“ suteikia mums šiuos rezultatus.

 
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

Dabar atidžiai pažvelkime į mūsų įprastą išraišką, atsakingą už aukščiau pateiktą rezultatą.

'[abcd]' caret (^) reiškia, kad modelio atitiktis turėtų būti taikoma pradžioje, o charlist [abcd] reiškia, kad į rezultatų rinkinį grąžinami tik filmų pavadinimai, prasidedantys a, b, c arba d.

Pakeiskime savo pirmiau pateiktą scenarijų ir naudokime „NOT“ sąrašą ir pažiūrėkime, kokius rezultatus gausime atlikę užklausą.

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

Minėto scenarijaus vykdymas „MySQL“ darbastalyje prieš „myflixdb“ suteikia mums šiuos rezultatus.

 
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

Dabar atidžiai pažvelkime į mūsų reguliariąją išraišką, atsakingą už aukščiau nurodytus rezultatus.

'[abcd]' caret (^) reiškia, kad modelio atitiktis turėtų būti taikoma pradžioje, o charlist [abcd] reiškia, kad filmų pavadinimai, prasidedantys bet kuriuo iš pridėtų simbolių, neįtraukiami į rezultatų rinkinį.

Reguliariosios išraiškos metaženkliai

Tai, ką mes apžvelgėme aukščiau pateiktame pavyzdyje, yra paprasčiausia taisyklingosios išraiškos forma. Pažvelkime į pažangesnes reguliaraus reiškinio modelio atitiktis. Tarkime, kad norime ieškoti filmų pavadinimų, kurie prasideda šablonu „kodas“, tik naudojant įprastą išraišką, kaip mes tai darytume? Atsakymas yra metaženkliai. Jie leidžia mums tikslinti modelio paieškos rezultatus naudojant įprastas išraiškas.

Char apibūdinimas Pavyzdys
* Žvaigždute (*) metacharacter naudojamas, kad atitiktų nulis (0), arba daugiau atvejų stygos iki ją PASIRINKITE * IŠ filmų, kur pavadinimas REGEXP 'da *'; suteiks visiems filmams, kuriuose yra simbolių „da“ .Pavyzdžiui, Da Vinci kodas, „Tėčio mažos mergaitės“.
+ Plius (+) metacharacter naudojamas, kad atitiktų vieną ar daugiau atvejų stygos iki ją. PASIRINKTI * IŠ „filmų“ KUR „pavadinimas„ REGEXP “pirmadienis +; visiems filmams, kuriuose yra simbolių, suteiks „mon“ .Pavyzdžiui, „Angelai ir demonai“.
? Klausimo (?) Metacharakteris naudojamas norint suderinti nulį (0) arba vieną prieš jį eilučių egzempliorių. PASIRINKTI * IŠ `kategorijų` WHERE` kategorijos_pavadinimas `REGEXP 'com?'; pateiks visas kategorijas, kuriose yra eilutė com. Pavyzdžiui, komedija, romantinė komedija.
. Taškas (.) Metacharacter naudojamas, kad atitiktų bet kokį vieną simbolį išskyrus naują eilutę. PASIRINKITE * IŠ filmų, kur `metų_paleistas` REGEXP '200.'; pateiks visus filmus, išleistus per metus, pradedant simboliais „200“, po kurių eina bet kuris vienas personažas. Pavyzdžiui, 2005,2007,2008 ir kt.
[abc] Charlist [ABC] vartojamas, kad atitiktų bet kurį iš uždarose simbolių. PASIRINKTI * IŠ „filmų“ KUR „pavadinimas„ REGEXP “[vwxyz]“; pateiks visus filmus, kuriuose yra bet koks „vwxyz“ simbolis. Pavyzdžiui, „X-Men“, „Da Vinci“ kodas ir kt.
[abc] Charlist [abc] naudojamas, kad atitiktų bet kokius simbolius išskyrus tuos, uždara. PASIRINKTI * IŠ „filmų“ KUR „pavadinimas„ REGEXP “[vwxyz] '; pateiks visus filmus, kuriuose bus ne „vwxyz“, o kiti simboliai.
[AZ] [AZ] naudojamas neatitiko jokio viršutinę raidė. PASIRINKTI * IŠ `narių` WHERE` pašto_adresas` REGEXP '[AZ]'; duos visiems nariams, kurie turi pašto adresą, kuriame yra bet koks simbolis nuo A iki Z ... Pavyzdžiui, Janet Jones su narystės numeriu 1.
[az] [AZ] naudojamas neatitiko jokio mažąją raidę PASIRINKTI * IŠ `narių` WHERE` pašto_adresas` REGEXP '[az]'; duos visiems nariams, turintiems pašto adresus, kuriuose yra bet koks simbolis nuo a iki z ... Pavyzdžiui, Janet Jones su narystės numeriu 1.
[0–9] [0-9] yra naudojamas, kad atitiktų bet skaitmenį nuo 0 iki 9. PASIRINKTI * IŠ „narių“, KUR „kontaktinis_ numeris„ REGEXP “[0–9]“ suteiks visiems nariams pateiktus kontaktinius numerius, kuriuose yra simbolių „[0–9]“. Pavyzdžiui, Robertas Philas.
^ Caret“ (^) naudojamas pradėti rungtynes ​​pradžioje. PASIRINKITE * IŠ `filmų` WHERE` pavadinimas` REGEXP '[cd]'; pateikia visus filmus, kurių pavadinimas prasideda bet kuriuo iš „CD“ simbolių. Pvz., juodas kodas, mažos tėčio mergaitės ir Da Vinčio kodas.
| Vertikali juosta (|) yra naudojamas išskirti alternatyvų. PASIRINKTI * IŠ `filmų` WHERE` pavadinimas` REGEXP '[cd] | [u]'; pateikia visus filmus, kurių pavadinimas prasideda bet kuriuo iš „cd“ arba „u“ simbolių. Pavyzdžiui, „Kodo vardas juodas“, „Daddy's Little Girl“, „Da Vinci“ kodas ir „Underworld - Awakening“.
[[: <:]] [[: <:]] Atitinka žodžių pradžią. PASIRINKITE * IŠ „filmų“ KUR „pavadinimas„ REGEXP “[[: <:]] už“; pateikia visus filmus, kurių pavadinimai prasideda simboliais. Pavyzdžiui: pamiršti Sarah Marshal.
[[:>:]] [[:>:]] Atitinka žodžių pabaigą. PASIRINKITE * IŠ `filmų` WHERE` pavadinimas` REGEXP 'ack [[:>:]]'; pateikia visus filmus, kurių pavadinimai baigiasi simboliais „ack“ .Pavyzdžiui, „Code Name Black“.
[:klasė:] [: Klasė:] atitinka simbolių klasę ty [: Alfa:] ir atitinkančių raidės, [: erdvė:], kad atitiktų baltą erdvę, [: punct:] Ar rungtynės skyrybos ženklų ir [: viršutinis:] viršutinių klasės raidėmis. PASIRINKTI * IŠ „filmų“ KUR „pavadinimas„ REGEXP “[: alfa:] '; visiems filmams su pavadinimais pateikiamos tik raidės. Pvz., Užmiršti Sarą Marshal, X-Men ir pan. Ši užklausa praleis tokius filmus kaip Karibų piratai 4.

Kairinis brūkšnys (\) yra naudojamas kaip pabėgimo simbolis. Jei norime jį naudoti kaip reguliaraus reiškinio modelio dalį, turėtume naudoti dvigubus atgalinius brūkšnius (\\)

Santrauka

  • Reguliarūs posakiai suteikia galingą ir lanksčią modelio atitiktį, kuri gali padėti mums įdiegti energijos paieškos įrankius mūsų duomenų bazių sistemoms.
  • REGEXP yra operatorius, naudojamas atliekant reguliarios išraiškos modelio atitikmenis. RLIKE yra sinonimas
  • Reguliarūs posakiai palaiko daugelį metaženklų, kurie leidžia daugiau lankstumo ir kontrolės atliekant šablonų atitikmenis.
  • Nugaros brūkšnys naudojamas kaip pabėgimo simbolis įprastose išraiškose. Į tai atsižvelgiama tik tada, jei buvo naudojami dvigubi atgaliniai brūkšniai.
  • Reguliarūs posakiai neskiria didžiųjų ir mažųjų raidžių.