Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare...

26
Programare Programare Perl Perl Sabin Sabin - - Corneliu Buraga Corneliu Buraga www.infoiasi.ro/~busaco www.infoiasi.ro/~busaco / / 1 1 Programare Programare Perl Perl Expresii Expresii regulate regulate Sabin-Corneliu Buraga Facultatea de Informatica, UAIC, Romania http://www.infoiasi.ro/~busaco/

Transcript of Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare...

Page 1: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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/

Page 2: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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

Page 3: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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

Page 4: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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 =~)

Page 5: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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/;

}

Page 6: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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";

Page 7: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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;

}

Page 8: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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;

}

Page 9: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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;

}

Page 10: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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

Page 11: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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]/

Page 12: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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

Page 13: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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]/);}

Page 14: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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 $)

Page 15: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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

Page 16: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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)+/);

}

Page 17: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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} ≡ ?

Page 18: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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]

Page 19: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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"

Page 20: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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:/

Page 21: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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);

Page 22: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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

Page 23: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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

}

Page 24: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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

Page 25: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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)

Page 26: Operating Systems II Course Outlinebusaco/teach/courses/perl/presentations/perl3.pdf · Programare Perl Sabin-Corneliu Buraga busaco/ 2 “Nature uses as little as possible of anything.”

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