$sentence =~ /velka/RE jsou case sensitive (rozliÜuje se mezi mal²mi a velk²mi pφsmeny). Pokud tedy prom∞nnß $sentence odsahuje °et∞zec
$sentence = "Velka rezata liska";potom porovnßnφ
$sentence =~ /velka/
je nepravdivΘ. Operßtor !~ je pou₧φvßn k testovßnφ nerovnosti. Pokud tedy prom∞nnß $sentence odsahuje °et∞zec
$sentence = "Velka rezata liska";je v²raz
$sentence !~ /velka/
pravdiv², proto₧e °et∞zec velka se nevyskytuje v prom∞nnΘ $sentence.
if ($sentence =~ /under/) { print "We're talking about rugby\n"; }Blok p°φkaz∙ bude vypisovat zprßvu, pokud bude obsah prom∞nnΘ $sentence nap°.
$sentence = "Up and under"; $sentence = "Best winkles in Sunderland";Postup je jednoduÜÜφ, pokud p°i°adφme °et∞zec prom∞nnΘ se jmΘnem $_. Prom∞nnß $_ je skalßrnφ prom∞nnß. Pokud tak uΦinφme, nemusφme pou₧φvat srovnßvacφ operßtory a m∙₧eme jednoduÜÜe zapsat
if (/under/) { print "We're talking about rugby\n"; }Prom∞nnß $_ je implicitnφ pro mnohΘ operace Perlu a pou₧φvß se velice Φasto.
RE je vhodnΘ zaΦφt pou₧φvat postupn∞, jejich vytvß°enφ je Φasto urΦit²m druhem um∞nφ.
Uvedeme n∞kterΘ specißlnφ znaky pou₧φvanΘ v RE a jejich v²znam
. # libovoln² znak, krom∞ znaku pro nov² °ßdek ^ # zaΦßtek °ßdky nebo °et∞zce $ # konec °ßdky nebo °et∞zce * # ₧ßdn² nebo n∞kolik v²skyt∙ p°edchozφho znaku + # jeden nebo n∞kolik v²skyt∙ p°edchozφho znaku ? # ₧ßdn² nebo jeden v²skyt poslednφho znakua p°φklady pou₧itφ porovnßnφ. P°ipome≥me, ₧e v²razy RE musφ b²t uzav°eny do lomφtek (/.../).
t.e # v²raz p°edstavuje °et∞zec zaΦφnajφcφ t nßsledovanΘ Φφmkoli (alespo≥ jednφm znakem) a konΦφcφ pφsmenem e # Vyhovuje nap°.: the # tre # tle # ale nevyhovuje te # tale ^f # f na zaΦßtku °ßdky ^ftp # ftp na zaΦßtku °ßdky e$ # e na konci °ßdky tle$ # tle na konci °ßdky und* # un nßsledovanΘ ₧ßdn²m nebo vφce znaky d # vyhovuje nap°. un # und # undd # unddd (atd) .* # libovoln² °et∞zec bez znak∙ nov² °ßdek. Proto₧e # . vyhovuje libovolnΘmu znaku krom∞ novΘho °ßdku a # * znamenß ₧ßdn² nebo vφce v²skyt∙ poslednφho znaku. ^$ # °ßdek s prßzdn²m obsahem.
Existujφ dalÜφ mo₧nosti.
Pro porovnßnφ se skupinou znak∙ se pou₧φvajφ hranatΘ zßvorky.
Porovnßnφ se provßdφ na libovoln² znak uvnit° zßvorek.
PomlΦka (-) uvnit° hranat²ch zßvorek oznaΦuje znaky mezi uveden²mi znaky a
znak ^ na zaΦßtku zßvorky znamenß negaci:
[qjk] # q nebo j nebo k [^qjk] # ani j ani g ani k [a-z] # cokoli od a do z vΦetn∞ znak∙ a a z [^a-z] # nikoli malß pφsmena [a-zA-Z] # libovolnΘ pφsmeno [a-z]+ # libovoln² neprßzdn² °et∞zec z mal²ch pφsmenV tomto bod∞ m∙₧ete p°eskoΦit na p°φklady, zbytek kapitoly je uveden² jako referΦnφ seznam.
Vertikßlnφ Φßra | znamenß "or" a kulatΘ zßvorky (...) je mo₧nΘ pou₧φt k seskupovßnφ:
nanuk|zmrzlina # nanuk nebo zmrzlina (m|d)rak # mrak nebo drak (da)+ # da nebo dada nebo dadada nebo ..
N∞kterΘ specißlnφ znaky:
\n # nov² °ßdek \t # tabelßtor \w # libovoln² alfanumerick² znak, # \w je ekvivalentnφ s [a-zA-Z0-9_] \W # libovoln² nealfanumerick² znak, # \W je ekvivalentnφ s [^a-zA-Z0-9_] \d # libovolnß Φφslice, tj. [0-9] \D # znak jin² ne₧ Φφslice, tj. [^0-9] \s # znak pro vlo₧enΘ mezery, tj. mezera, # tab, nov² °ßdek, atd. \S # nemezerov² znak \b # hranice slova, tento znak nelze pou₧φt uvnit° [] \B # na uvedenΘm mφst∞ nenφ hranice slova
Znaky jako $, |, [, ), \, / a majφ v RE zvlßÜtnφ v²znam. Pokud chcete porovnßvat na v²skyt n∞kterΘho z t∞chto znak∙, musφte p°ed nimi uvΘst zp∞tnΘ lomφtko. Tj:
\| # svislß Φßra \[ # ·vodnφ hranatß zßvorka \) # koncovß zßvorka \* # hv∞zdiΦka \^ # st°φÜka \/ # lomφtko \\ # zp∞tnΘ lomφtkoatd.
[01] # "0" nebo "1" \/0 # d∞lenφ nulou "/0" \/ 0 # d∞lenφ nulou s mezerou "/ 0" \/\s0 # d∞lenφ nulou s mezerov²m znakem # "/ 0" kde mezerov² znak m∙₧e b²t tabelßtor atd. \/ *0 # d∞lenφ nulou s mo₧n²mi mezerami # "/0" nebo "/ 0" nebo "/ 0" atd. \/\s*0 # d∞lenφ nulou s mo₧n²mi mezerov²mi znaky # \/\s*0\.0* # jako p°edchozφ v²raz, ale s desetinou teΦkou a mo₧n²mi # nulami za teΦkou. Vyhovuje # "/0." a "/0.0" a "/0.00" atd a # "/ 0." a "/ 0.0" a "/ 0.00" atd. if (/(\w*)@([a-z\.]+)/) # kontrola, zda v prom∞nnΘ $_ je { # ulo₧ena e-mail adresa $uzivatel=$1; $domena=$2; }