|
Regulárne výrazy sú spôsobom, ako vyhodnocovať obsah textových reťazcov.
Pomocou regulárnych výrazov je možné definovať masku, ktorá sa využíva
pri vyhodnocovaní reťazca a jeho separovania na časti.
Regulárny výraz je textový reťazec, ktorý obsahuje ľubovolný text. Reťazec
potom regulárnemu výrazu vyhovuje / ak obsahuje zadaný text/ alebo nevyhovuje
/ak ho neobsahuje/. Spôsob vyhodnocovania reťazca ovplyvňujú metaznaky
- znaky so špeciálnym významom
| ^ |
zastupuje začiatok reťazca |
| $ |
zastupuje koniec reťazca |
| . |
zastupuje jeden ľubovolný znak |
Pre ilustráciu zopár príkladov:
Regulárnemu výrazu abcde vyhovujú reťazce abcdefgh aj tralabcdefg...nevyhovuje
však dcabcdabc. Použijeme prvý metaznak: ^
Regulárnemu výrazu
^ahoj potom vyhovejú len tieto reťazce: ahoj-milan, ahoj, ahoj aj
ahoj - musia začínať na ahoj.
Podobne regulárnemu výrazu ahoj$
vyhovejú len reťazce Láska ahoj, ahoj či akurát-ahoj - musia
končiť na ahoj.
Kombinácii obidvoch metaznakov ^abc$ vyhovuje len a
len reťazec abc. Bodka zastupuje ľubovolný znak., čo znamená že
regulárnemu výrazu dobr. vyhovujú reťazce dobrá aj dobrý.
V prípade, že chceme použiť hocijaký metaznak v pôvodnom
význame, napríklad $ v zmysle dolára, je nutné použiť lomítko. Príklad
na takýto prípad:
Príklad 1
|
^\$ahoj |
vyhovujú len reťazce $ahoj, $ahojky-ahoj, $ahojahoj
podobne |
|
\\ahoj |
vyhovujú len reťazce \ahoj či \ahojky |
Ďalšie metaznaky sú hviezdička, plus a otáznik s nasledujúcimi významom
- ovplyvňujú počet opakovaní reťazca, podobne ako metaznak zložená zátvorka
| * |
Musí sa opakovať 0 až N krát alebo vôbec
(0..N) |
| + |
Musí sa opakovať aspoň raz (1..N) |
| ? |
Musí sa opakovať najviac raz (0..1) |
| {min,max} |
Musí sa opakovať najmenej min krát,
maximálne max krát (min,max) |
| {min,} |
Musí sa opakovať najmenej min krát
(min...N) |
| {N} |
Musí sa opakovať práve N krát (N) |
Príklad 2 - Opakovanie väčšej časti regulárneho výrazu zabezpečia zátvorky
|
*. |
vyhovujú všetky reťazce |
|
ah+oj |
vyhovujú reťazce ahoj, ahhoj, ahhhoj |
|
(ah)+oj |
vyhovujú reťazce ahoj, ahahoj, axojahahoj |
|
(ah)*oj |
vyhovujú reťazce oj, ahoj, ahhoj, ahhhoj |
|
(ah)?oj |
vyhovujú reťazce oj, ahoj |
|
^(ah){1}oj |
vyhovuje len ahoj |
|
(ah){3,}oj |
vyhovuje malahahahoj, ahahahahoj |
|
^(ah){1,2}oj |
vyhovuje len ahoj, ahahoj |
Ďalší metaznak [ slúži pre množinu. Regulárnemu výrazu ^[ab]c
vyhovej[ len výrazy ac, bc. Rúra (pipe) umožní zapísať aj podvýrazy,
napríkald pre dni. (Pondelok|Utorok|Streda|Stvrtok|Piatok|Sobota|Nedeľa)
Pipe je možné kombinovať aj so zátvorkou, napríklad pre:
((Zz)uzana|(Jj)akub). Je mo6n0 použiť aj skrátenú verziu
pre množinu, a a to [0-9] pre číslice a [a-zA-Z] pre písmená ANGLICKEJ
ABECEDY. Naše šťaveľčekové písmená tam
nepatria!
Regulárne výrazy [[:<:]] a [[:>:]] zastupujú
začiatok a koniec slova. 5 miestne číslo vyhovie výrazu [[:<:]][digit]{5}[[:<:]].
Tu som použil ďalší regulárny výraz pre triedu. Zoznam všetkých tried
znakov je v tabuľke:
| [[alnum]] |
Písmená a číslice |
| [[alpha]] |
Písmená angl.abecedy |
| [[blank]] |
Medzera, tabulátor |
| [[cntrl]] |
Riadiace znaky |
| [[digit]] |
Číslice |
| [[graph]] |
Grafické znaky |
| [[lower]] |
Malé písmená angl. abecedy |
| [[print]] |
Tlačitelné znaky |
| [[punct]] |
Interpukcia a ďalšie znaky |
| [[space]] |
Akákoľvek medzera /tabulátor, nový riadok,
stránka..atď/ |
| [[upper]] |
Veľké písmená angl.abecedy |
| [[xdigit]] |
Číslice a písmena šesťnástkovej sústavy |
Pre prácu s reg. výrazmi slúžia funkcie Ereg, EregI,Ereg_Replace a
EregI_Replace. Funkcia Ereg má tvar:
integer Ereg(string reg_výraz, string reťazec, array [subreťazce])
čo znamená že funkcia Ereg porovná reťazec s reg. výrazom a zhodné časti
rozdelí podľa zátvorkiek v reg. výraze do poľa array. Dosť bolo teórie,
trošku praxe:
Príklad 3 - kontrola emailu
if (ereg("^(.+)@(.+)\\.(.+)$", $email, $casti_enmailu)) {
// adresa je OK
echo ("Adresa je OK <BR>\n" .
"E-mail
je: $casti_emailu[0] <BR>\n" .
"Uživateľské
meno: $casti_emailu[1] <BR>\n" .
"Domena:
$casti_emailu[2] <BR>\n".
"Top-level
domena: $casti_emailu[3] <BR>\n");
else echo ("Chybna adresa <BR>\n");
Funkcia EregI robí to isté, len neberie ohľad na malé a veľké
znaky. Funkcia Ereg_Replace nahradí časť reťazca, ktorý vyhovuje
reg. výrazu reťazcom náhrada a jej syntax je nasledovná:
string Ereg_Replace(string reg_vyraz, string nahrada, string retazec)
To by bolo asi všetko, čo zhruba viem o regulárnych výrazoch v PHP. Často
sa hodia, niekde je však jednoduchšie použiť aj iné funkcie na prácu s reťazcami,
ako Explode či iné.
N Á V R A T
Copyright 2003 MGX
|