Kas ir regulārie izteicieni?
Regulārās izteiksmes palīdz meklēt datus, kas atbilst sarežģītiem kritērijiem. Iepriekšējā apmācībā apskatījām aizstājējzīmes. Ja iepriekš esat strādājis ar aizstājējzīmēm, jums var rasties jautājums, kāpēc mācīties regulāras izteiksmes, ja, izmantojot aizstājējzīmes, varat iegūt līdzīgus rezultātus. Tā kā, salīdzinot ar aizstājējzīmēm, parastās izteiksmes ļauj mums meklēt datus, kas atbilst vēl sarežģītākam kritērijam.
Pamata sintakse
Regulārās izteiksmes pamata sintakse ir šāda
SELECT statements… WHERE fieldname REGEXP 'pattern';
ŠEIT -
- "SELECT paziņojumi ..." ir standarta SELECT paziņojums
- "WHERE fieldname" ir tās kolonnas nosaukums, kurā jāveic regulārā izteiksme.
- "REGEXP 'modelis" " REGEXP ir regulārās izteiksmes operators, un" modelis "apzīmē modeli, kas jāsaskaņo ar REGEXP. RLIKE ir REGEXP sinonīms un sasniedz tādus pašus rezultātus kā REGEXP. Lai to nejauktu ar operatoru LIKE, labāk tā vietā izmantot REGEXP .
Apskatīsim praktisku piemēru
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
Iepriekš minētais vaicājums meklē visus filmu nosaukumus, kuros ir vārda kods. Nav svarīgi, vai "kods" ir nosaukuma sākumā, vidū vai beigās. Kamēr tas ir nosaukumā, tas tiks apsvērts.
Pieņemsim, ka mēs vēlamies meklēt filmas, kas sākas ar a, b, c vai d, kam seko jebkurš skaits citu rakstzīmju, kā mēs to panāktu. Mēs varam izmantot regulāru izteiksmi kopā ar metarakstiem, lai sasniegtu vēlamos rezultātus.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
Iepriekš minētā skripta izpildīšana MySQL darbagaldā pret myflixdb dod mums šādus rezultātus.
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 |
Tagad cieši apskatīsim mūsu regulāro izteiksmi, kas ir atbildīga par iepriekš minēto rezultātu.
'[abcd]' caret (^) nozīmē, ka sākumā ir jāpiemēro parauga atbilstība, un charlist [abcd] nozīmē, ka mūsu rezultātu kopā tiek atgriezti tikai filmu nosaukumi, kas sākas ar a, b, c vai d.
Pārveidosim iepriekš minēto skriptu un izmantosim charlist, un redzēsim, kādus rezultātus mēs iegūsim pēc vaicājuma izpildes.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Iepriekš minētā skripta izpildīšana MySQL darbagaldā pret myflixdb dod mums šādus rezultātus.
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 |
Tagad cieši apskatīsim mūsu regulāro izteiksmi, kas ir atbildīga par iepriekš minētajiem rezultātiem.
'[abcd]' caret (^) nozīmē, ka sākumā jāpiemēro parauga atbilstība, un charlist [abcd] nozīmē, ka filmu nosaukumi, kas sākas ar jebkuru no pievienotajām rakstzīmēm, tiek izslēgti no rezultātu kopas.
Regulārās izteiksmes metarakstiņi
Tas, ko mēs aplūkojām iepriekš minētajā piemērā, ir vienkāršākais regulārās izteiksmes veids. Apskatīsim uzlabotas regulārās izteiksmes modeļu atbilstības. Pieņemsim, ka mēs vēlamies meklēt filmu nosaukumus, kas sākas ar rakstu "kods", tikai izmantojot regulāru izteiksmi, kā mēs to darīsim? Atbilde ir metahomas. Tie ļauj mums precīzi pielāgot modeļa meklēšanas rezultātus, izmantojot regulāras izteiksmes.
Char | Apraksts | Piemērs | |
---|---|---|---|
* | Zvaigznīte (*) metacharacter tiek izmantots, lai atbilstu nulle (0) vai vairākus tālāk virknes iepriekšējām to | SELECT * FROM filmas WHERE nosaukums REGEXP 'da *'; piešķirs visām filmām ar rakstzīmēm "da" .Piemēram, Da Vinči kods, Tēta mazās meitenes. | |
+ | Plus (+) metacharacter tiek izmantots, lai atbilstu pievienot vienu vai vairākus no virknes iepriekšējām to. | SELECT * FROM `filmas` WHERE` nosaukums `REGEXP 'mon +'; piešķirs visām filmām, kuru rakstzīmes ir “pirmdienas”. Piemēram, Eņģeļi un dēmoni. | |
? | Jautājuma (?) Metaraksts tiek izmantots, lai saskaņotu nulli (0) vai vienu virkni gadījumu pirms tā. | SELECT * FROM `categories` WHERE` category_name` REGEXP 'com?'; sniegs visas kategorijas, kas satur virkni com. Piemēram, komēdija, romantiska komēdija. | |
. | Punktu (.) Metacharacter tiek izmantota, lai atbilstu jebkuru vienu rakstzīmi, kas, izņemot jaunu līniju. | SELECT * FROM filmas WHERE `year_released` REGEXP '200.'; piešķirs visas filmas, kas izlaistas gados, sākot ar burtiem "200", kam seko jebkura atsevišķa rakstzīme. Piemēram, 2005,2007,2008 utt. | |
[abc] | Charlist [abc] tiek izmantota, lai atbilstu jebkuru no slēgtās rakstzīmes. | SELECT * FROM `filmas` WHERE` nosaukums `REGEXP '[vwxyz]'; sniegs visas filmas, kurās ir jebkura atsevišķa rakstzīme “vwxyz”. Piemēram, X-Men, Da Vinči kods utt. | |
[abc] | Charlist [abc] tiek izmantota, lai ar rakstzīmēm, izņemot tiem slēgtas. | SELECT * FROM `filmas` WHERE` nosaukums` REGEXP '[vwxyz]'; sniegs visas filmas, kurās ir citas rakstzīmes, nevis tās, kas ir ierakstītas "vwxyz". | |
[AZ] | [AZ] tiek izmantota, lai atbilstu jebkuru augšējo burts. | ATLASIET * FROM `biedri` WHERE` postal_address` REGEXP '[AZ]'; visiem dalībniekiem, kuru pasta adrese satur jebkuru rakstzīmi no A līdz Z, norādīs… Piemēram, Dženeta Džonsa ar dalības numuru 1. | |
[az] | [Az] tiek izmantota, lai atbilstu jebkuru mazais burts | ATLASIET * FROM `biedri` WHERE` postal_address` REGEXP '[az]'; visiem dalībniekiem, kuriem ir pasta adreses ar jebkuru rakstzīmi no a līdz z, norādīs… Piemēram, Dženeta Džonsa ar dalības numuru 1. | |
[0–9] | [0-9] tiek izmantota, lai atbilstu jebkuru ciparu no 0 līdz 9. | SELECT * FROM `members` WHERE` contact_number` REGEXP '[0-9]' dos visiem dalībniekiem iesniegtos kontaktu numurus, kas satur rakstzīmes "[0-9]". Piemēram, Roberts Fil. | |
^ | Lai sāktu maču sākumā, tiek izmantots burts (^) . | SELECT * FROM `filmas` WHERE` nosaukums` REGEXP '[cd]'; dod visas filmas ar nosaukumu, kas sākas ar jebkuru no "cd" rakstzīmēm. Piemēram, koda nosaukums melns, tēta mazās meitenes un Da Vinči kods. | |
| | Vertikāla josla (|) tiek izmantots, lai izolētu alternatīvas. | SELECT * FROM `filmas` WHERE` nosaukums` REGEXP '[cd] | [u]'; dod visas filmas ar nosaukumu, sākot ar jebkuru no "cd" vai "u" rakstzīmēm. Piemēram, koda nosaukums Black, Daddy's Little Girl, Da Vinci Code un Underworld - Awakening. | |
[[: <:]] | [[: <:]] Atbilst sākumu vārdiem. | ATLASIET * FROM `filmas` WHERE` nosaukums `REGEXP '[[: <:]] par'; dod visas filmas ar nosaukumiem, kas sākas ar rakstzīmēm. Piemēram: aizmirstot Sāru Maršalu. | |
[[:>:]] | [[:>:]] Atbilst beigas vārdiem. | SELECT * FROM `filmas` WHERE` nosaukums `REGEXP 'ack [[:>:]]'; dod visām filmām, kuru nosaukumi beidzas ar burtiem "ack" .Piemēram, Code Name Black. | |
[: klase:] | [: Klase:] atbilst rakstzīmju klasi ti [: alfa:], lai atbilst vēstules, [: telpa:], lai atbilstu balto laukumu, [: punct:] ir spēļu pieturzīmes un [: augšējā:] par augšējo klases vēstulēm. | SELECT * FROM `filmas` WHERE` nosaukums `REGEXP '[: alfa:]'; dod visām filmām ar nosaukumiem tikai burtus. Piemēram, aizmirstot Sāru Maršalu, X-Men uc. Šis vaicājums tiks izlaists, piemēram, Karību jūras pirāti 4. |
Atpakaļsvītras zīme (\) tiek izmantota kā aizbēgšanas raksturs. Ja mēs vēlamies to izmantot kā parauga daļu regulārā izteiksmē, mums jāizmanto dubultās slīpsvītras (\\)
Kopsavilkums
- Regulārās izteiksmes nodrošina spēcīgu un elastīgu modeļu atbilstību, kas var palīdzēt mums ieviest enerģijas meklēšanas utilītus mūsu datu bāzu sistēmām.
- REGEXP ir operators, kas tiek izmantots, veicot regulārās izteiksmes modeļu atbilstības. RLIKE ir sinonīms
- Regulārās izteiksmes atbalsta vairākas metahomas, kas nodrošina lielāku elastību un kontroli, veicot modeļu atbilstības.
- Atpakaļ slīpsvītra tiek izmantota kā aizbēgšanas raksturs parastajās izteiksmēs. Tas tiek ņemts vērā tikai tad, ja ir izmantotas dubultās slīpsvītras.
- Regulārās izteiksmes nav reģistrjutīgas.