$sentence =~ /velka/RE jsou case sensitive (rozlisuje se mezi malymi a velkymi pismeny). Pokud tedy promenna $sentence odsahuje retezec
$sentence = "Velka rezata liska";potom porovnani
$sentence =~ /velka/
je nepravdive. Operator !~ je pouzivan k testovani nerovnosti. Pokud tedy promenna $sentence odsahuje retezec
$sentence = "Velka rezata liska";je vyraz
$sentence !~ /velka/
pravdivy, protoze retezec velka se nevyskytuje v promenne $sentence.
if ($sentence =~ /under/)
{
print "We're talking about rugby\n";
}
Blok prikazu bude vypisovat zpravu, pokud bude obsah promenne $sentence napr.
$sentence = "Up and under"; $sentence = "Best winkles in Sunderland";Postup je jednodussi, pokud priradime retezec promenne se jmenem $_. Promenna $_ je skalarni promenna. Pokud tak ucinime, nemusime pouzivat srovnavaci operatory a muzeme jednodusse zapsat
if (/under/)
{
print "We're talking about rugby\n";
}
Promenna $_ je implicitni pro mnohe operace Perlu a pouziva se velice casto.
RE je vhodne zacit pouzivat postupne, jejich vytvareni je casto urcitym druhem umeni.
Uvedeme nektere specialni znaky pouzivane v RE a jejich vyznam
. # libovolny znak, krome znaku pro novy radek ^ # zacatek radky nebo retezce $ # konec radky nebo retezce * # zadny nebo nekolik vyskytu predchoziho znaku + # jeden nebo nekolik vyskytu predchoziho znaku ? # zadny nebo jeden vyskyt posledniho znakua priklady pouziti porovnani. Pripomenme, ze vyrazy RE musi byt uzavreny do lomitek (/.../).
t.e # vyraz predstavuje retezec zacinajici t nasledovane cimkoli (alespon
jednim znakem) a koncici pismenem e
# Vyhovuje napr.: the
# tre
# tle
# ale nevyhovuje te
# tale
^f # f na zacatku radky
^ftp # ftp na zacatku radky
e$ # e na konci radky
tle$ # tle na konci radky
und* # un nasledovane zadnym nebo vice znaky d
# vyhovuje napr. un
# und
# undd
# unddd (atd)
.* # libovolny retezec bez znaku novy radek. Protoze
# . vyhovuje libovolnemu znaku krome noveho radku a
# * znamena zadny nebo vice vyskytu posledniho znaku.
^$ # radek s prazdnym obsahem.
Existuji dalsi moznosti.
Pro porovnani se skupinou znaku se pouzivaji hranate zavorky.
Porovnani se provadi na libovolny znak uvnitr zavorek.
Pomlcka (-) uvnitr hranatych zavorek oznacuje znaky mezi uvedenymi znaky a
znak ^ na zacatku zavorky znamena negaci:
[qjk] # q nebo j nebo k [^qjk] # ani j ani g ani k [a-z] # cokoli od a do z vcetne znaku a a z [^a-z] # nikoli mala pismena [a-zA-Z] # libovolne pismeno [a-z]+ # libovolny neprazdny retezec z malych pismenV tomto bode muzete preskocit na priklady, zbytek kapitoly je uvedeny jako refercni seznam.
Vertikalni cara | znamena "or" a kulate zavorky (...) je mozne pouzit k seskupovani:
nanuk|zmrzlina # nanuk nebo zmrzlina (m|d)rak # mrak nebo drak (da)+ # da nebo dada nebo dadada nebo ..
Nektere specialni znaky:
\n # novy radek \t # tabelator \w # libovolny alfanumericky znak, # \w je ekvivalentni s [a-zA-Z0-9_] \W # libovolny nealfanumericky znak, # \W je ekvivalentni s [^a-zA-Z0-9_] \d # libovolna cislice, tj. [0-9] \D # znak jiny nez cislice, tj. [^0-9] \s # znak pro vlozene mezery, tj. mezera, # tab, novy radek, atd. \S # nemezerovy znak \b # hranice slova, tento znak nelze pouzit uvnitr [] \B # na uvedenem miste neni hranice slova
Znaky jako $, |, [, ), \, / a maji v RE zvlastni vyznam. Pokud chcete porovnavat na vyskyt nektereho z techto znaku, musite pred nimi uvest zpetne lomitko. Tj:
\| # svisla cara \[ # uvodni hranata zavorka \) # koncova zavorka \* # hvezdicka \^ # striska \/ # lomitko \\ # zpetne lomitkoatd.
[01] # "0" nebo "1"
\/0 # deleni nulou "/0"
\/ 0 # deleni nulou s mezerou "/ 0"
\/\s0 # deleni nulou s mezerovym znakem
# "/ 0" kde mezerovy znak muze byt tabelator atd.
\/ *0 # deleni nulou s moznymi mezerami
# "/0" nebo "/ 0" nebo "/ 0" atd.
\/\s*0 # deleni nulou s moznymi mezerovymi znaky
#
\/\s*0\.0* # jako predchozi vyraz, ale s desetinou teckou a moznymi
# nulami za teckou. 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 promenne $_ je
{ # ulozena e-mail adresa
$uzivatel=$1;
$domena=$2;
}