Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare...
Transcript of Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare...
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 11
ProgramareProgramare PerlPerlExpresiiExpresii regulateregulate
Sabin-Corneliu BuragaFacultatea de Informatica, UAIC, Romania
http://www.infoiasi.ro/~busaco/
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 22
“Nature uses as little as possible of anything.”
Johannes Keppler
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 33
CuprinsCuprins
• Expresii regulate *– Definitie– Operatori– Meta-caractere– Constructii predefinite– Functii– Exemple
* Multumiri lui Victor Tarhon-Onu
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 44
ExpresiiExpresii regulateregulate• Expresie regulata (regular expression) = şablon (pattern) caruia, pe baza unor reguli precise, i se poate asocia unui text
• Variabila implicita în care se realizează diferite acţiuni implicând expresii regulate este $_
• Specificarea altei variabile se realizează prin intermediul operatorului =~
• Se poate utiliza si operatorul !~ (echivalent cu negatia lui =~)
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 55
ExpresiiExpresii regulate | regulate | operatorioperatori• Operatorul m//
– Se foloseşte pentru a căuta un şablon în cadrul unui text dat (daca nu e pericol de confuzie, litera “m” poate lipsi)
– Se returnează valoarea logică “adevărat” în cazul în care căutarea se încheie cu succes, “fals” în restwhile (<STDIN>) {print "Am gasit subsirul \"Victor\" in $_" if m/Victor/;
}
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 66
ExpresiiExpresii regulate | regulate | operatorioperatori• Operatorul m// (optiuni uzuale)
– Căutare case-insensitive(majusculele nu diferă de minuscule) – iwhile (<STDIN>) {
print "Am gasit tag-ul \"<b>\" sau \"<B>\" in $_" if /<b>/i;
}– Cautarea tuturor secvenţele care se potrivesc şablonului – gmy $sir = "a b r a c a d a b r a", $num_a = 0;while ($sir =~ /a/g) { $num_a++; }print "Am gasit de $num_a ori caracterul \'a\'.\n";
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 77
ExpresiiExpresii regulate | regulate | operatorioperatori
• Operatorul s///– Permite căutarea şi substituţia unui şablon
cu un textwhile (<STDIN>) {
s/autmat/Automat/i; print;
}
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 88
ExpresiiExpresii regulate | regulate | operatorioperatori
• Operatorul qr//– Precompilează un şir de caractere ca expresie
regulată– Expresia regulată precompilată poate fi stocată
într-o variabilă şi refolosită în construcţia altor expresii regulate sau poate fi utilizată directmy $expr = qr/(autmat|automt)/i; while (<STDIN>) {
s/$expr/Automat/; print;
}
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 99
ExpresiiExpresii regulateregulate
• Delimitarea expresiei regulate şi, dacă este cazul, a şirului substituitor se poate realiza cu alte caractere speciale decât "/"
while (<>) { print if m|<pre>|i .. m|</pre>|i;
}
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 1010
ExpresiiExpresii regulate | metaregulate | meta--caracterecaractere
• Identificarea caracterelor– Cautarea unui caracter se face specificind
acel caracter– Pentru cautari complexe, se folosesc
meta-caractere = caractere care nu se identifică pe ele însele în cadrul unei expresii regulate
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 1111
ExpresiiExpresii regulate | metaregulate | meta--caracterecaractere
• Meta-caracterul .– Utilizat să identifice orice caracter,
exceptând caracterul newline "\n"• Meta-caracterele [...]
– Reprezintă o clasă de caractere (enumerare): /[a-z]/ /[a-z][ATX][0-7]/
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 1212
ExpresiiExpresii regulate | metaregulate | meta--caracterecaractere
• Meta-caracterul ^– Folosit în cadrul unei secvenţe de caractere
are rol de negare[^2-5] – toate caracterele exceptind 2, 3, 4, 5
– In alte cazuri, desemnează începutul uneilinii^[2-5] – orice sir începind cu o cifră cuprinsăîntre 2 şi 5
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 1313
ExpresiiExpresii regulate | metaregulate | meta--caracterecaractere
• Meta-caracterul $– Identifica finalul unei linii: /Hesse$/
• Meta-caracterul |– Alternativa intre doua sau mai multe forme
posibile ale unei secvente dintr-un textwhile (<STDIN>) {
print if (/[0-9]|[A-Z][a-z]/);}
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 1414
ExpresiiExpresii regulate | metaregulate | meta--caracterecaractere
• Meta-caracterele ()– Grupeaza atomi şi memoreaza valoarea
subşirurilor din text corespunzătoare acestor atomi
– Atom = caracter lipsit de semnificatie oriun meta-caracter de pozitionare (^ sau $)
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 1515
ExpresiiExpresii regulate | metaregulate | meta--caracterecaractere
• Meta-caracterele ? * + { }– Au rolul de multiplicatori ai unui atom– Un atom urmat de ? poate identifica de
zero sau maxim o singură dată un atom– Simbolul * poate identifica zero, una
sau mai multe apariţii consecutive ale aceluiaşi atom
– Un atom urmat de + poate să identifice măcar o apariţie a atomului
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 1616
ExpresiiExpresii regulate | metaregulate | meta--caracterecaractere
• Meta-caracterele ? * + { }
while (<STDIN>) { print "Cel putin o aparitie a cuvintului \'web\'
la inceputul liniei\n" if (/^(web)+/);
}
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 1717
ExpresiiExpresii regulate | metaregulate | meta--caracterecaractere
• Meta-caracterele ? * + { }– atom {m, n} va identifica într-o expresie cel puţin
m atomi, dar nu mai mulţi de n– atom {m,} va identifica m sau mai mulţi atomi– atom {,n} va identifica n atomi cel mult– atom {n} va identifica exact n atomi– Remarci:
{1,} ≡ +{0,} ≡ *{0,1} ≡ ?
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 1818
ExpresiiExpresii regulate | regulate | constructiiconstructii
• Constructii predefinite– \d o cifra: [0-9]– \w un caracter alfanumeric: [0-9_a-zA-Z]– \s un spatiu alb: [\t\r\n\ \f ]
– \D orice exceptind cifre: [^0-9]– \W caracter ne-alfanumeric: [^0-9_a-zA-Z]– \S orice exceptind spatii albe: [^\t\n\r\ \f]
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 1919
ExpresiiExpresii regulate | regulate | constructiiconstructii
• Constructii predefinite– \b identifica limitele unui cuvint– \B identifica orice alt context decât limitele
unui cuvânt (interiorul unui cuvânt)– \A desemnează începutul unui şir– \Z identifică sfârşitul unui şir
– Exemplu: /text\b/ poate identifica " text", "text", "context", dar nu şi "textul"
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 2020
ExpresiiExpresii regulate | regulate | functiifunctii
• Functia tr///– Translateaza caracter cu caracter un text
# majusculele devin minusculetr/A-Z/a-z/# http: devine ftp:tr/http:/ftp:/
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 2121
ExpresiiExpresii regulate | regulate | functiifunctii
• Functia split()– Imparte un şir de caractere în funcţie de
o expresie regulată şi returnează un tablouconţinând subşirurile care nu satisfac aceaexpresie regulată
$data_sistem = localtime (time);($ziua, $luna, $num, $timp, $an) =
split(/\s+/, $data_sistem);
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 2222
ExpresiiExpresii regulate | regulate | functiifunctii
• Functia join()– Reuneşte mai multe şiruri de caractere
în unul singur, delimitate de un scalar• Functia eval()
– Poate fi folosită pentru evaluarea/execuţia unei expresii Perl
– Valoarea returnată reprezintă valoarea ultimei expresii evaluate
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 2323
ExpresiiExpresii regulate | regulate | exempleexemple
• Verificarea validitatii unei adrese de e-mailsub valid_email {
$testmail = shift; return 0 if ($testmail =~ / /); if ($testmail =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ || $testmail !~
/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/) { return 0;
} else { return 1; }
}
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 2424
ExpresiiExpresii regulateregulate
• Alte detalii privitoare la expresiile regulate sunt disponibile in articolul“Expresii regulate in Perl”de S. Buraga si V. Tarhon-Onu, NET Report, vol. 11, 09 (120), sept. 2002:www.infoiasi.ro/~busaco/publications/articles/regexp.pdf
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 2525
PerlPerl• Exercitii
– Sa se scrie o expresie regulata care verifica dacaun sir de caractere contine identitatea uneipersoane, respectind forma “Prenume I. Nume”, unde “I” este o initiala optionala, iar “Prenume”poate fi compus dintr-un singur cuvint ori din maxim trei cuvinte despartite de caracterul “-”
– Sa se scrie o expresie regulata care verifica dacaun sir de caractere reprezinta un CNP valid (13 cifre, din care prima trebuie sa fie 1 sau 2, urmatoarele 6 desemnind o data calendaristicade forma AALLZZ)
ProgramareProgramare PerlPerl
SabinSabin--Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busacowww.infoiasi.ro/~busaco// 2626
RezumatRezumat
• Expresii regulate–Definitie–Operatori–Meta-caractere–Constructii predefinite–Functii–Exemple