$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;
}