View
2
Download
0
Category
Preview:
Citation preview
✬
✫
✩
✪
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
✬
✫
✩
✪
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¢
✬
✫
✩
✪
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
✬
✫
✩
✪
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�;
✬
✫
✩
✪
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);
✬
✫
✩
✪
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�
);
✬
✫
✩
✪
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
✬
✫
✩
✪
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�
✬
✫
✩
✪
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.
✬
✫
✩
✪
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){ #... }
✬
✫
✩
✪
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
✬
✫
✩
✪
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
}
✬
✫
✩
✪
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";
}
✬
✫
✩
✪
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);
}
✬
✫
✩
✪
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.
✬
✫
✩
✪
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
✬
✫
✩
✪
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
✬
✫
✩
✪
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).
✬
✫
✩
✪
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.
✬
✫
✩
✪
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;
✬
✫
✩
✪
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
✬
✫
✩
✪
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 ...
✬
✫
✩
✪
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})
✬
✫
✩
✪
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;
✬
✫
✩
✪
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;
✬
✫
✩
✪
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);
?>
✬
✫
✩
✪
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);
?>
✬
✫
✩
✪
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()
✬
✫
✩
✪
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℄}";
?>
✬
✫
✩
✪
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';
}
?>
✬
✫
✩
✪
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);
?>
✬
✫
✩
✪
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);
?>
✬
✫
✩
✪
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
✬
✫
✩
✪
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
?>
Recommended