PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan)...

34
\

Transcript of PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan)...

Page 1: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

PERL - j�zyk do pisania

Perl, to ró»nie si� tªuma zy. Dla ty h, którzy go zaledwie lubi¡,

Perl jest Prakty znym J�zykiem do Wy i¡gów i Raportów (ang.

Pra ti al Extra tion and Report Language). Jednak dla

prawdziwy h miªo±ników Perl to Patologi zne Eklekty zne

Robótki Lingwisty zne (ang. Patologi ally E le ti Rubbish

Lister) (w dosªownym tªuma zeniu Patologi zny i Eklekty zny

Roztrz¡sa z �mie i).

Jak uru homi¢ program Perla?

1. Pierwsza metoda: u»y ie komendy perl w wierszu

pole e«

perl -e 'print �hurra, udaªo si�\n�;'

2. Druga metoda: napisanie wykonywalnego (!) skryptu.

Pierwszy wiersz skryptu musi zawiera¢ informa j� dla

interpretera pole e« o tym, z którego programu skorzysta¢,

zatem pierwsza linijka takiego skryptu musi mie¢ posta¢

mniej wi� ej tak¡:

#!/usr/bin/perl

Nast�pnie wykonywalny (!) skrypt nale»y uru homi¢, na

przykªad tak:

prompt> ./skrypt_perla

Page 2: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Zmienne w Perlu

Zmienne:

Typ Znak Przykªad Zna zenie

Skalar $ $ile Pojedyn za warto±¢

(li zba lub napis)

Tabli a � �tabli a Lista warto± i

indeksowana li zbami

Hasz % %zbior Grupa warto± i

indeksowana napisami

Pro edura & &zrob Fragmnt kodu,

który mo»na wykona¢

Page 3: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Obiekty pojedyn ze - skalary

Zmiennej skalarnej mo»na przypisa¢ warto±¢ dowolnej

(skalarnej) posta i: li z� aªkowit¡, zmiennopozy yjn¡, napis

albo odwoªanie do innej zmiennej.

Tak, jak w interpreterze pole e« Unixa, do produkowania

ó»nego rodzaju warto± i mo»emy u»ywa¢ udzysªowów.

Cudzyªów podwójny (� �) dokonuje interpola ji (p wªa± iwie

podstawienia) zmienny h oraz interpreta ji odwrotnego

uko±nika, pod zas gdy pojedyn ze apostrofy (' ') nie dokonuj¡

interpola ji ani interpreta ji. Natomiast pojedyn ze, odwrotne

apostrofy (` `) powoduj¡ wykonanie zewn�trznego programu i

zwró enie jego dany h wyj± iowy h.

Przykªady:

$ile = 42; li zba aªkowita

$pi = 3.14159265; li zba �rze zywista�

$awokado = 6.023e23; nota ja naukowa

$zwierzak = �sz zór�; napis

$jakie = �mój $zwierzak�; napis z interpola j¡

$ ena = 'To kosztuje $100'; napis bez interpola ji

$kiedy = $wtedy; inna zmienna

$x = $mole * $awokado; wyra»enie

$ wd = `pwd`; napis - wyj± ie z programu

Page 4: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Obiekty mnogie - tabli e

Tabli a jest uporz¡dkowan¡ list¡ skalarów o warto± ia h

udost�pniany h przez okre±lenie poªo»enia skalara na li± ie.

�eby przypisa¢ tabli y list�, wystar zy zgrupowa¢ zmienne za

pomo ¡ nawiasów:

�dom = (�kanapa�, �krzesªo�, �stóª�, �»ona�);

Mo»na te» odwrotnie, je±li u»yjemy tabli y w kontek± ie listy,

na przykªad po prawej sronie przypisania listy, orzymamy z

powrotem t� list�, któ¡ wªo»yli±my:

(�ziemniak�, �winda�, �tenis�, �spizarnia�) = �dom;

Przypisania s¡ równolegªe, dlatego za pomo ¡ przypisania listy

do listy mo»na zamieni¢ miejs ami zmienne pisz¡ :

(�$alfa�, �$beta�) = (�$beta�, �$alfa�);

Tak, jak j�zyku C indeksujemy tabli e za zynaj¡ od zera.

Indeksy pisze si� w nawiasa h kwadratowy h, a poniewa» mamy

do zynienia ze skalarem, wi� zawsze poprzedzamy go znakiem

$.

$dom[0℄ = �kanapa�;

$dom[1℄ = �krzesªo�;

$dom[2℄ = �stóª�;

$dom[3℄ = �»ona�;

Page 5: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Tabli e, wªa± iwo± i

Na tabli a h mo»emy wykonywa¢ wiele porzyte zny h i ªatwy h

w obsªudze funk ji, tj.

sort sortuje list� i zwra a posortowan¡ list�

reverse sortuje list� w odwrotnej kolejno± i

push umiesz za na ko« u tabli y element lub list�

pop pobiera tabli � i zwra a jej ostatni element

shift pobiera pierwszy elemnt tabli y i skra a j¡ o 1

unshift wstawia list� na po z¡tek listy

spli e usuwa z listy okre±lony argument

split zwra a list� utworzon¡ z elementów uzyskany h

w wyniku po i� ia napisu wedªug jakiego± wzor a

Przykªady:

1 push �lista1, �lista2;

2 ($login,$haslo,$reszta) = split /:/, $_, 3;

3 �LISTA1 = sort �panowie, �panie, �inni;

4 �LISTA2 = reverse �panowie, �panie, �inni;

5 $skalar = pop(�lista);

Page 6: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Obiekty mnogie - hasze

Hasz jest nieuporz¡dkowanym (po angielsku hash to siekanina,

bigos, baª¡gan) zbiorem skalarów, o warto± ia h udost�pniany h

poprzez podanie napisu skojarzonego z ka»dym napisem.

Klu ze do hasza nie zale»¡ do poªo»nia, zatem przy

wprowadzaniu elementów trzeba dostar zy¢ zarówno klu z jak i

warto±¢. Mo»na przypisa¢ haszowi list�, tak jak zwykªej tabli y,

ale ka»da para elementów b�dzie traktowana jako para klu z -

warto±¢.

%tydzien = (�N�, �niedziela�, �Po�, �poniedziaªek�,

�Wt�, �wtorek�, ��r�, �±roda�,

�Czw�, � zwartek�, �Pt�, �pi¡tek�,

�So�, �sobota�);

W Perlu, dla jasno± i zapisu, zamiast prze inka stosuje si� dla

haszy seperator =>.

%tydzien = (

�N� => �niedziela�,

�Po� => �poniedziaªek�,

�Wt� => �wtorek�,

��r� => �±roda�,

�Czw� => � zwartek�,

�Pt� => �pi¡tek�,

�So� => �sobota�

);

Page 7: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Operatory porównania

Operatory porównania dla li zb i napisów:

Porównanie Li zby Napisy Zwra ana warto±¢

Równe == eq Prawda, je±li $a

jest równe $b

Nierówne != ne Prawda, gdy $a

jest nierówne $b

Mniejsze ni» < lt Prawda, je±li $a

jest mniejsze od $b

Wi�ksze ni» > gt Prawda, je±li $a

jest wi�ksze od $b

Mniejsze lub równe <= le Prawda, je±li $a

jest mniejsze

lub równe $b

Wi�ksze lub równe >= ge Prawda, je±li $a

jest wi�ksze

lub równe $b

Porównanie <=> mp 0 je±li jest róªwne,

1, je±li $a jest wi�ksze,

-1 je±li $b jest wi�ksze

Page 8: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Pliki

U hwyty plików:

U hwyt pliku wi¡»e si.� z plikiem za pomo ¡ funk ji open.

Funk ja open ma dwa parametry - u hwyt pliku i nazw� pliku,

któr¡ h emy skojarzy¢ z plikiem. Istniej¡ trzy gotowe u hwyty

plików: STDIN, STDOUT, STDERR.

Przykªady:

open(SEZAM,�nazwa_pliku�); zytaj z istniej¡ ego pliku

open(SEZAM,�<nazwa_pliku�); to samo jawnie

open(SEZAM,�>nazwa_pliku�); utwórz plik i pisz do niego

open(SEZAM,��nazwa_pliku�); dopisz do istniej¡ ego pliku

Po otwar iu pliku mo»na od zytywa¢ wiersze za pomo ¡

operatora k¡towego: <>. Operator ten obejmuje u hwyt pliku, z

którego h emy zyta¢, lub do którego h emy pisa¢.

Przykªad:

print STDOUT �Podaj li zb�: �; #za»¡daj li zby

$li zba = <STDIN>; #wprowad¹ li zb�

print STDOUT �Podaªe± $li zba\n�; #wypisz li zb�

Page 9: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Pliki, .d.

Typowy przykªad:

#!/usr/bin/perl

#

#skryp ik do zytania i wypisywania wierszy pliku

#

$pℓik = $ARGV[0℄;

if ( !de�ned $pℓik ){

print STDERR " . . . nie podales nazwy pliku jako parametru\n"; 10

exit;

}

open (PLIK,"<$plik") | | die ". .nie mozna otworzy pliku $plik!";

while ( $ℓine = <PLIK> ){

hop($ℓine);

print STDERR "$line\n";

}

Funk je hop i homp usuwaj¡ znaki nowej linii.

Page 10: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Pliki, .d.

Operatory badaj¡ e pliki:

Operator Nazwa Wynik

-e Istnieje Prawda, je±li plik $a istnieje

-r Do od zytu Prawda, je±li plik $a mo»na zyta¢

-w Do pisania Prawda, je±li do pliku $a

mo»na pisa¢

-d Katalog Prawda, je±li plik $a

jest katalogiem

-f Plik Prawda, je±li plik $a

jest zwykªym plikiem

-T Plik tekstowy Prawda, je±li plik $a

jest plikiem tekstowym

Na przykªad:

if (-r $plik){ #... }

Page 11: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

DBI - interfejs baz dany h

DBI to po±rednik pomi�dzy programem perlowym a dowoln¡

li zb¡ sterowników baz dany h. W ogólnym przypadku porzeba

u hwytu bazy dany h, który sªu»y pó¹zniej do wywoªania

DBI-> onne t.

Przykªad:

$dbh = DBI-> onne t('DBI:driver','username','password',

{PrintError => 1, RaiseError => 1})

or die �bª¡d poª¡ zenia: $DBI::errstr�;

$dbh->do(SQL) or die �bª¡d wykonania SQL: $dbh->errstr;

$sth = DBI->prepare(SQL)

or die �bª¡d przygotowania SQL: $dbh->errstr;

$sth->exe ute or die �bª¡d wykonania SQL: $sth->errstr;

while (�re ord = $sth->fet hrow_array) { # ... }

$sth->finish;

$dbh->dis onne t

Page 12: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

DBI - przykªad, str. 1

#!/usr/bin/perl −w

use stri t;

use DBI;

use Term::ANSIColor qw(: onstants);

use vars qw(%CONFIG $dbh $EXECUTION TIME);

$EXECUTION TIME= times;

%CONFIG = ( 10

driver => 'DBI:mysql',

user => 'nikt',

host => 'lo alhost',

base => 'nazwa_bazy',

pass => 'zadne',

port => 3306,

tra e => 0,

RaiseError => 1,

PrintError => 1,

AutoCommit => 0, #musi by 0 jesli maja by transak je! 20

);

&DBI onne t;

#slownik walut, powierz hni i regionow

my $qry = "SELECT id,slowo from waluty";

my $sth = $dbh−>prepare($qry) or die " $DBI::errstr\n";

$sth−>exe ute or die

" nie mozna wykona pole enia na otwartej bazie dany h: $DBI::errstr\n";

while ( my �a = $sth−>fet hrow array() ){

$WALUTA{$a[0℄} = $a[1℄; $WALUTA{$a[1℄} = $a[0℄; 30

}

Page 13: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

DBI - przykªad, str. 2

funk ja DBI onne t

#podla zenie do bazy

sub DBI onne t{

my $hst = "$CONFIG{driver}:".

"database=$CONFIG{base};".

"host=$CONFIG{host};".

"port=$CONFIG{port}";

DBI−>tra e($CONFIG{tra e});

my %attr = (

PrintError => $CONFIG{PrintError}, 10

RaiseError => $CONFIG{RaiseError},

);

$dbh = DBI−> onne t($hst,$CONFIG{user},$CONFIG{pass},\%attr)

or do{

print STDERR "Uwaga! Bª¡d w dost�pie do bazy dany h! ".

"Przy próbie podª¡ zenia do:\n$hst\njako u»ytkownik [".

"$CONFIG{user}℄, hasªo [$CONFIG{pass}℄, ".

"baza odpowiedziaªa komunikatem:\n".

$DBI::errstr."\n". 20

"Program przerwany awaryjnie.\n";

&ENDS;

};

$hst =� s/^(.*?)=(\w+);(.*?)$/"$1=".CYAN.BOLD.$2.RESET.";$3"/gge;

$hst =� s/^(.*?)=(\w+);(.*?)$/"$1=".GREEN.BOLD.$2.RESET.";$3"/gge;

$CONFIG{user} = BOLD.YELLOW.$CONFIG{user}.RESET;

print STDERR " Podª¡ zony do [$hst℄ jako [$CONFIG{user}℄\n\n";

}

Page 14: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

DBI - przykªad, str. 3

funk ja ENDS

#zakon zenie dzialania programu

sub ENDS{

printf STDERR " . . .Czas pra y: %1.2fs\n\n",times − $EXECUTION TIME;

$dbh−>dis onne t;

exit(0);

}

Page 15: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Wyra»enia regularne

Dwa gªówne operatory dopasowania wzor a i funk jasplit:

m//

s///

split //, WYRA�ENIE

Zamiast uko±ników mo»na u»y¢ wªasny h znaków

orani zaj¡ y h. Z drugiej strony, mo»na pomin¡¢ m w

operatorze m// je±li tylko ograni znikami b�d¡ uko±niki.

Mody�katory dopasowywania wzor a:

Modyf. zna zenie

/i ignoruje wielko±¢ liter

(wra»liwy na ustawienia regionalne)

/x ignoruje odst�py we wzor a h

i dopusz za komentarze

/g globalny - dopasowuje wzorze tak z�sto

jak to mo»liwe

/s Pozwala dopasowa¢ znak nowego wiersza

oraz ignoruje $*

/o Kompiluje wzorze tylko raz

/e Prawa strona s/// jest kodem dla bloku eval

/ee Prawa strona s/// jest napisem dla bloku eval

nast�pnie jest uru hamiana jako kod, kórego warto±¢

jest ponownie przetwarzana.

Page 16: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Wyra»enia regularne, .d.

Interpreter wyra»e« regularny h = Maszyna

Maszyna patrzy na gramatyk� wyra»enia i porównuje j¡ z

napisem, na którym dokonuje sie dopasowania wzor a. Je±li

jaka± z�±¢ napisu mo»e by¢ potraktowana jako zdanie z tego

j�zyka (j�zyka Maszyny) - mówi ona �tak�, je±li nie mo»e - mówi

ona �nie�.

Wi�kszo±¢ znaków pasuje sama do siebie, np.

/Nazwisko/

Inne s¡ znakami spe jalnymi. S¡ to tzw. metaznaki.

\ | ( ) [ ℄ { }

∧$ * + ? .

Odwrotny uko±nik zmienia metaznak w znak dosªowny, ale znak

alfanumery zny zamienia w metaznak albo sekwen j�, np.

\b \D \t \3 \s

Wi�kszo±¢ elementów wyra»e« regularny h, w tym zwykªe znaki

alfanumry zne nale»y do grupy aser ji.

Element wyra»enia regularnego = aser ja

Zwykle jednak aser ja ozna za aser j� zerowej szeroko± i.

Aser ja niezerowej dªugo± i = atom

Page 17: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Wyra»enia regularne

- podstawowe zasady

1. Maszyna próbuje dopasowa¢ elementy napisu poªo»one

najbardziej na lewo

2. Caªe wyra»enie jest traktowane jako zbiór mo»liwo± i

(skrajny przypadek to jedna mo»liwo±¢). Je±li istnieje wi� ej

mo»liwo± i s¡ one syntakty znie rozdzielone znakiem |.

3. Dowolna mo»liwo±¢ pasuje, je±li ka»dy element w

mo»liwo± i pasuje sekwen yjnie. Je±li si� prosi o

dopasowanie /

∧foo/, to tak jakby si� prosiªo o dopasowanie

ztere h elementów po kolei.

4. Aser je musz¡ by¢ dopasowane wedªug ± i±le okre±lony h

zasad (-> tabelka). Je±li aser ja nie pasuje w aktualnej

pozy ji, Maszyna wra a do zasady 3 i próbuje jesz ze raz

inny element.

5. Atom z kwanty�katorem pasuje jedynie wtedy, je±li sam

atom pasuje li zb� razy okre±lon¡ prze kwanty�kator (->

tabelka).

6. Ka»dy atom dopasowuje si� wedªug jego rodzaju a rodzaje

atomów s¡ ± i±le okre±lone

Page 18: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Wyra»enia regularne - rodzaje atomów

• Wyra»enie regularne w nawiasa h okr¡gªy h (...) pasuje,

gdy jakiekolwiek wyra»enie, którego symbolem jest tutaj

... pasuje zgodnie z zasad¡ 2.

• �.� pasuje do ka»dego znaku poza \n. Pasuje tak»e do \n

je±li si� u»yje mody�katora /s. .* pasuje do maksymalnej

li zby jaki hkolwiek tra�e«, pod zas gdy .? dopasowuje

minimaln¡ li zb� dowolny h znaków. /(..):(..):(..)/

ozna za trzy pola oddzielone dwukropkami, z który h ka»de

ma dªugo±¢ dwó h znaków.

• Lita znaków w nawiasa h kwadratowy h (zwana klas¡

znaków) dopasowuje jeden z ty h znaków. Daszek na

po z¡tku klasy dziaªa w ten sposób, »e lista dopasowuje

tylko znaki, który h nie ma na li± ie znaków. Zakresy

znaków mog¡ by¢ okre±lone przez ozna zenia a-z.

Wi�kszo±¢ metaznaków tra i swój meta harakter wewn¡trz

listy znaków. Aby dopasowa¢ daszk, nie mo»na go postawi¢

jako pierwszy znak na li± ie znaków. Aby dopasowa¢ nawias

kwadratowy nale»y albo postawi¢ przed nim odwrotny

uko±nik, albo ustawi¢ go jako pirwszy na li± ie. Nie ma

sensu okre±la¢ koljno± i w klasie znaków, poniewa» ka»dy

znak jest interpretowany oddzielnie. Na przykªad

[fee|fie|foe℄ zna zy tyle samo, o [feio|℄.

• Litery poprzedzone odwrotnym uko±nikiem dopasowuj¡

znak spe jalny lub klas� znaków (->tabelka).

Page 19: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Wyra»enia regularne -

rodzaje atomów, .d.

• Cyfra poprzedzona odwrotnym uko±nikiem dopasowuje

okolwiek, o odpowiednie nawiasy fakty znie dopasowuj¡

(z wyj¡tkiem \0, który dopasowuje 0).

• Li zby dwu lub trzy yfrowe z systemu ósemkowego

poprzedzone znakiem odwrotnego uko±nika, na przykªa

\033 dopasowuj¡ znak z t¡ warto± i¡.

• Jedna lub dwie yfry z ystemu szesnastkowego poprzedzone

znakami x i \, na przykªad \x7f, dopasowuj¡ znak, który

ma t¡ warto±¢ heksade ymaln¡.

• Dowolny znak poprzedzony przez znaki i \, na przykªad

\ D, dopasowuje odpowiadaj¡ y mu znak kontrolny.

• Jakikolwiek inny znak poprzedzony przez znak \

dopasowuje ten znak.

• Dowolny inny znak dopasowuje sam siebie.

Page 20: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Wyra»enia regularne -

odwoªania wste zne

Odwoªania wste zne:

$1, $2, $3 ... Zawieraj¡ to o dopasowaªy odpowiednie

nawiasy okr¡gªe.

S¡ automaty znie lokalizowane.

$' Zawiera wszystko to o byªo

przed dopasowanym napisem

$` Zawiera wszystko to o byªo

po dopasowanym napisie.

$& Zawiera aªy dopasowany napis.

$+ Zwra a to o dopasowaª ostatni

nawias k¡towy.

Przykªady:

1. Zamie« miejs ami dwa pierwsze wyrazy

s/

∧([

∧℄+) +([

∧℄+)/$2 $1/

2. Dopasuj wyraz = wyraz

/(\w+)\s*=\s*\1/

3. Dopasuj wiersz z o najmniej 80 znakami:

/.{80,}/

4. Zamie« wszystkie tabulatory na odpowiadaj¡ e im li zby

spa ji:

while s/\t+/' ' x (length($&) * 8 - length($`) % 8/e;

Page 21: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Wyra»enia regularne - znaki spe jalne

Znaki spe jalne, poprzedzone odwrotnym uko±nikiem:

Znak Zna zenie

\a Alarm (sygnaª d»wi�kowy - beep)

\n Znak nowego wiersza

\r Znak powrotu karetki

\t Tabulator

\f Znak nowej strony

\e Znak ESC

\d Cyfra - to samo, o [0-9℄

\D Znak inny ni» yfra

\w Znak nale»¡ y do wyrazu (alfanumery zny)

to samo, o [a-zA-Z_0-9℄

\W Znak inny ni» nale»¡ y do wyrazu

\s Biaªy znak, to samo, o [ \t\n\r\f℄

\S Nie-biaªy znak

Page 22: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Wyra»enia regularne - aser je

Aser je:

Aser ja Zna zenie

∧Pasuje na po z¡tku napisu

(albo wiersza, je±li u»yto \m)

$ Pasuje na ko« u napisu

(albo wiersza, je±li u»yto \m)

\b Pasuje na grani y sªowa (pomi�dzy \w a \W)

\B Pasuje wsz�dzie poza grani ¡ sªowa

\A Pasuje na po z¡tku napisu

\Z Pasuje na ko« u napisu

\G Pasuje, gdzie przerwane zostaªo otatnie m//g

(?=...) Pasuje, je±li Maszyna dopsowaªaby nast�pne ...

(?!...) Pasuje, je±li Maszyna nie dopsowaªaby nast�pnego ...

Page 23: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Wyra»enia regularne - kwanty�katory

Kwanty�katory:

Warto±¢ Warto±¢ Dozwolony zakres

minimalna maksymalna

{n,m} {n,m}? Musi si� pojawi¢ o najmniej

n razy, ale nie wi� ej ni» m razy

{n,} {n,}? Musi si� pojawi¢

o najmniej n razy

{n} {n}? Musi sie pojawi¢

dokªadnie n razy

* *? 0 albo wi� ej razy

(to samo o {0,1})

+ + 1 albo wi� ej razy

(to samo o {1,})

? ?? Ani razu albo raz

(to samo o {0,1})

Page 24: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Wyra»enia regularne - przykªady

Przegl¡d przydatny h wyra»e« regularny h:

1. Zamie« miejs ami dwa pierwsze sªowa:

s/(\S+)(\s+)(\S+)/$3$2$1/

2. Klu z = warto±¢:

m/(\w+)\s*=\s*(.*)\s*$/

3. Wiersz skªadaj¡ y si� o najmniej z 80 znaków:

m/.{80,}/

4. Data w forma ie: MM/DD/YY/ HH:MM:SS

m|(\d+)/(\d+)/(\d+) (\d+):(\d+):(\d+)|

5. Zmiana katalogów:

s(/usr/bin)(/usr/lo al/bin)g

6. Usuwanie po z¡tkowy h i ko« owy h odst�pów:

s/

∧\s+//;

s/\s+$//;

7. Zamienianie \, po kórym wyst�puje n na prawdziwy znak

nowego wiersza:

s/\\n/\n/g;

Page 25: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Wyra»enia regularne - przykªady, .d.

8. Usuwanie ± ie»ki z nazwy pliku:

s(

∧.*/)()

9. Sprawdzanie systemu opera yjnego:

die �To nie jest Linux� unless $

∧O = m/linux/i;

10. �¡ zenie nast�puj¡ y h po sobie wierszy w wielowierszowy

napis:

s/\n\s+/ /g

11. Uzyskiwanie wszystki h li zb z napisu:

�nums = m/(\d+\.?\d*|\.\d+)/g;

12. Znajdowanie wszystki h wyrazów napisany h wielkimi

literami:

� apwords = m/(\b[∧\Wa-z0-9_℄+\b)/g;

13. Znajdowanie wszystki h wyrazów napisany h maªymi

literami:

�lowwords = m/(\b[∧\WA-Z0-9_℄+\b)/g;

14. Znajdowanie wszystki h wyrazów za zynaj¡ y h si� wielk¡

liter¡:

�i words = m/(\b[∧\Wa-z0-9_℄[∧\WA-Z0-9_℄*\b)/g;

Page 26: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Wyra»enia regularne PHP - przykªady

<?php

//Zwra a prawd�, je±li ab zostanie znalezione w $str

ereg(�ab �, $str);

//Prawda, je±li ab zostanie znalezione na po z¡tku $str

ereg(�

∧ab �, $str);

//Zwra a prawd�, je±li ab zostanie znalezione na ko« u $str

ereg(�ab $�, $str);

//Zwra a prawd�, je±li klient korzysta z przegl¡darki

//Nets ape 2, 3 lub MSIE 3

eregi(�(ozilla.[23℄|MSIE.3)�, $HTTP_USER_AGENT);

//Umiesz zenie trze h sªów oddzielony h spa jami

//do odpowiednio $regs[1℄, $regs[2℄ i $regs[3℄

ereg(�([[:alnum:℄℄+) ([[:alnum:℄℄+) ([[:alnum:℄℄+)�,

$str, $regs);

//Wstawienie tagu <br /> na po z¡tek $str

$str = ereg_repla e(�

∧�, �<br />�, $str);

//Wstawienie tagu <br /> na konie $str

$str = ereg_repla e(�$�, �<br />�, $str);

//Pozby ie si� wszystki h wyst¡pie« znaku nowej linii w $str

$str = ereg_repla e(�\n�, ��, $str);

?>

Page 27: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

PHP funk ja ereg_repla e()

string ereg_repla e(string regexp,

string na_ o_zamieni¢, string o_bada¢);

Funk ja ereg_repla e() analizuje wyra»eniem regularnym

regexp i¡g znaków o_bada¢, nast�pnie to o dopasowaªa

zamienia i¡giem znaków na_ o_zamieni¢.

Przykªady

<?php

$string = "To jest tekst";

e ho str_repla e("jest", "byª", $string);

e ho ereg_repla e("( )jest", "\\ 1byª", $string);

e ho ereg_repla e("(( )jest)", "\\ 2byª", $string);

?>

Page 28: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Perlowe wyra»enia regularne w PHP

Zamiast funk ji

1. ereg()

2. eregi()

3. ereg_repla e()

4. eregi_repla e()

5. strpos()

6. strr hr()

7. strstr()

u»ywaj¡ y h �dziwny h� wyra»e« regularny h (swoisty h dla

PHP) nale»y ra zej u»ywa¢ nast�puj¡ y h funk ji

(rozumiej¡ y h normalne wyra»enia regularne (a wªa± iwie

Perl-owe wyra»enia regularne)

1. preg_grep()

2. preg_mat h()

3. preg_mat h_all()

4. preg_repla e()

5. preg_repla e_ allba k()

6. preg_quote()

7. preg_split()

Page 29: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

PHP funk ja preg_mat h()

ojty preg_mat h(strig regexp,

string o_bada¢

[, tab &znalezione [, int flagi [, int offset℄℄℄

);

Funk ja preg_mat h() dopasowuje wyra»enie regularne regexp

w i¡gu znaków o_bada¢. Je±li dodamy tabli � znalezione

wów zas zostanie ona wypeªniona wynikami poszukiwa« w taki

sposób, »e $znalezione[0℄ b�dzie zawiera¢ aªy tekst, który

zostaª dopasowany, $znalezione[1℄ b�dzie zawiera¢ tekst, który

zostaª �zªapany� w pierwszym nawiasie okr¡gªym, itd. Za

pomo ¡ offset mo»emy powiedzie¢, od którego znaku h emy

rozpo z¡¢ dopasowywanie do wzor a.

<?php

// we¹ nazw� hosta z URLa

preg_mat h("/

∧(http:\/\/)?([∧\/℄+)/i",

"http://www.php.net/index.html", $mat hes);

$host = $mat hes[2℄;

// we¹ dwa ostatnie segmenty z nazwy hosta

preg_mat h("/[

∧\.\/℄+\.[∧\.\/℄+$/", $host, $mat hes);

e ho "domen¡ jest: {$mat hes[0℄}";

?>

Page 30: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

preg_mat h() .d.

<?php

/* \b ozna za grani � sªowa, wi� w przykªadzie poni»ej

tylko sªowo �web� zostanie dopasowane, natomiast

�webbing�, lub � obweb� nie zostan¡ dopasowane */

if (preg_mat h("/\bweb\b/i",

"PHP is the web s ripting language of hoi e.")) {

e ho 'Dopasowaªem';

} else {

e ho 'Nie dopasowaªem';

}

if (preg_mat h("/\bweb\b/i",

"PHP is the website s ripting language of hoi e.")) {

e ho 'Dopasowaªem';

} else {

e ho 'Nie dopasowaªem';

}

?>

Page 31: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

PHP funk ja preg_repla e()

ojty preg_repla e(ojty regexp,

ojty na_ o_zamieni¢, ojty o_bada¢

[,int limit [, int & ount℄℄

);

Funk ja dokonuje zamiany w i¡gu znaków o_bada¢

dopasowanego wyra»eniem regularnym regexp na i¡g znaków

na_ o_zamieni¢ pod warunkiem, »e nast¡pi dopasowanie. Je±li

dana o_bada¢ jest tabli ¡, wów zas zamiana jest dokonywana

na ka»dym elemen ie tabli y. limit ozna za maksymaln¡ li zb�

mo»liwy h zamian. Je±li u»yjemy ount to zostanie tam

zapisana li zba dokonany h zamian.

Przykªady

<?php

$string = 'April 15, 2003';

$pattern = '/(\w+) (\d+), (\d+)/i';

$repla ement = '$1, $3';

e ho preg_repla e($pattern, $repla ement, $string);

?>

Page 32: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

preg_repla e() .d.

Kapitaliza ja wszystki h tagów HTML. U»y ie mody�katora /e

<?php

preg_repla e("/(<\/?)(\w+)([∧>℄*>)/e",

�\\1'.strtoupper('\\2').'\\3'",

$html_body);

?>

Page 33: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

Quiz

<html>

<body>

< enter>

<form method="get" a tion="quiz.php">

<table border="1" ellspa ing="1" ellpadding="1">

<tr> <td width="200">

Podoba Ci sie zy nie?</td> </tr>

<tr> <td width="200" height="20"></td> </tr>

<tr> <td width="200" height="30"> 10

<input type="radio" name="ODP" value="TAK" CHECKED>

TAK

</td>

</tr>

<tr> <td width="200" height="30">

<input type="radio" name="ODP" value="NIE">

NIE

</td>

</tr>

<tr> <td width="200" height="30" align=" enter"> 20

<input type="submit" value="gªosuj">

</td>

</tr>

</table>

</form>

</ enter>

</body>

</html>

30

Page 34: PERL j¦zyk do pisania - Politechnika Gdańskaangielsku hash to anina, siek bigos, baª¡ gan) zbiorem w, alaró sk o h arto±ciac w h yc udost¦pnian p oprzez p o danie napisu o sk

quiz.php

<?php

$odp = $ GET["ODP"℄;

print ("<br>odpowiedziaªe±: $odp<br>\n");

$quizf = "./quiz.dat";

if ( ! ($f = fopen($quizf,"r+")) ){

die ("Nie mo»na otworzy¢ pliku z danymi z quizu<br>\n");

} 10

$data = fread($f,255);

preg mat h('/TAK\s*=\s*(\d+)\s*,*\s*NIE\s*=\s*(\d+)\s*/',

$data, $mat ht);

if ($odp == "TAK"){

$tak = $mat ht[1℄ + 1;

$nie = $mat ht[2℄;

}

else if ($odp == "NIE"){ 20

$tak = $mat ht[1℄;

$nie = $mat ht[2℄ + 1;

}

$wpis = "TAK = $tak, NIE = $nie";

print "aktualny wynik: $wpis<br>\n";

rewind($f);

fwrite ($f,$wpis);

f lose ($f); 30

?>