napredno web programiranje · regularni izrazi yregularni izrazi u phpu mogu biti u dve forme tj....

36
Napredno web programiranje web programiranje

Upload: others

Post on 15-Feb-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Napredno web programiranjeweb programiranje

Zend Technologies

Termini potrebni da se razumejuThe == and === operatorsRegular expressionPCREPCRE

Tehnike koje treba savladatiFormatting stringsComparing stringsM dif i   i  Modifying string contentsUsing regular expressions for pattern matching and extractionextraction.Joining and splitting strings

Potreba…Rad sa stringovima smatra se osnovnim sredstvom u PHPuR l j  š  j     b    i  k  (h l   l   i  Razlog je što je ceo web u stvari tekst (html, xml, script jezici, itd.)Iz tog razloga  rad sa tekstom je rad sa sajtom  sa Iz tog razloga, rad sa tekstom je rad sa sajtom, sa aspekta serverskog jezika

Poređenje stringova ==Najčešće poređenje je pomoću operatora ==, ali problem je što na ovaj način PHP sve prvo prevodi na odgovarajući tpi, pa može doći do neželjenih rezultataPrimerPrimer$a = ‘Hello World’;$b = 0;if($a == $b) {if($a == $b) {print “\$a and \$b are equal\n”;} else {print “\$a and \$b are not equal\n”;p \$ \$ q \ ;}

Ovaj operator se žargonski zove “slab” operatorj p g pKonverzija ide ka integer tipu

Poređenje stringova ===Sa druge strane drugi operator === je previše “jak” jer prvo zahteva da su promenljive istog tipa, pa tek onda analizira vrednostNa taj način  ove dve promenljive nisu isteNa taj način, ove dve promenljive nisu iste$a = 1;$b = “1”;if($a === $b) {if($a === $b) {print “\$a and \$b are equal\n”;} else {print “\$a and \$b are not equal\n”;p \$ \$ q \ ;}

Tada se može koristitiif( (string) $a === (string) $b) { ... }

Upotreba strcmp()Preporučen način za poređenje dva stringa je pomoću funkcije strcmp()strcmp() ima dva argumenta, i poredi ih na način kako se sortiraju termini u rečnicimasortiraju termini u rečnicimastrcmp() vraća 0 ako su dva stringa istaSada je problem rešen!

$a = 1;$b = “1”;if(strcmp($a  $b) == 0) {if(strcmp($a, $b) == 0) {print “\$a and \$b are the same\n”;} else {print “\$a and \$b are different\n”;print  \$a and \$b are different\n ;}

Upotreba strcmp()Ako dva operanda nisu ista, strcmp() vraća ‐1 ako se prvi pojavljuje pre drugog u rečniku, tj. 1 ako se prvi pojavljuje posle drugogpojavljuje posle drugogOva osobina je vrlo pogodna kod sortiranja niza čiji elementi su rečielementi su reči$colors = array(“red”, “blue”, “green”);sort($colors, SORT_STRING);ili$colors = array(“red”, “blue”, “green”);usort($colors, ‘strcmp’); // blue, green, red

Upotreba strcasecmp()strcasecmp() radi isto što i strcmp() sem što omogućava poređenje koje nije case sensitive$a = ‘hello’;$a =  hello;if(strcasecmp($a, ‘HELLO’)) {print “\$a is the same as HELLO, modulo case\n”;}

T b   l i i d  j   i j  liči   l  bi  i k d Treba naglasiti da je uticaj veličine slova bitan i kod sortiranja, pa će RED biti iza blue kada se sortira pomoću strcasecmp(), dok će sa strcmp() RED doći iza p p ppre blue.

Sličnost u delovima stringaDeo stringa naziva se substringZa rad sa delovima stringa, PHP nudi:t () i t ()  k j    i t  k  i  t () istrncmp() i strncasecmp(), koje su iste kao i  strcmp() istrcasecmp(), s tim što se uvodi i treći parametar $n, koji definiše da se poredi samo prvih $n karaktera oba jstringaTako ćestrncmp(‘figure gif ’  ‘figure2 gif ’  6) strncmp( figure1.gif ,  figure2.gif , 6) Vratiti 0, jer se poredi samo prvih 6 karaktera, tj. Pronaćiće da je string istij g

Upotreba strstr()strstr() se koristi kada se želi proveriti da li se jedan string nalazi bilo gde unutar drugog stringaPrvi argument strstr() je string unutar koga se traži a d k l d đdrugi onaj koji želi da se nađeU slučaju da je pronađen, vraća se traženi string i tekst iza njega, dok u suprotnom vraća FalseNaprednija opcija je traženje substringa, ali bez uticaja case sensitiveZa to se koristi funkcija stristr()jNa taj način za dati kod može se pronaći i ‘php’, ‘Php’, itd.

if(stristr($string  ‘PHP’) !== FALSE) {if(stristr($string,  PHP ) !== FALSE) {// do something}

Upotreba strpos()Ako se traži pozicija neko stringa unutar drugog stringa, koristi se funkcija strpos()Ova funkcija vraća poziciju prvog karaktera tražene rečiP d    ji i  ć  k išć j   ć    Pored toga, postoji i mogućnost korišćenja trećeg argumenta kojim se pretraga započinje od određenog karakteraNa isti način kao i ranije, i strpos()  ima svoju case sensitive opciju stripos()opciju stripos()

$offset = 0;$match pos = array();$match_pos = array();while(($offset = strpos($string, ‘PHP’, $offset)) !== FALSE) {$match_pos[] = $offset;}}Obzirom da je pozicija prvog karaktera u stringu 0, uvek treba koristiti operator === za proveru pri radu sa strpos() 

Pretraga “od pozadi”U slučaju da se pretraga radi od kraja stringa, pa ka početku, koriste se strchr(), strrpos(), ili strripos().

() i  i ()    k  id ič     () i strrpos() i strripos() su skoro identične sa strpos() i stripos() stim što pretragu kreću od kraja stringastrrchr() je sličan sa strstr()  stim što string traži u strrchr() je sličan sa strstr(), stim što string traži u smeru od kraja ka početku, i ako pronađe vraća traženi string i levi ostatak teksta g

Formatiranje stringaFormatiranje ispod dvostrukih navodnika omogućava ispravno prepoznavanje vrednosti promenljive

   ‘G ’$name = ‘George’;$age = 30;print “ $name is $age years old ”;print  $name is $age years old. ;

printf() formatiOsnovna funkcija za formatiranje je printf()Formatiranje je ovde omogućeno kroz veliki broj 

 k ji      l jargumenata koji su na raspolaganju

FormatiranjeNa ovaj način ispis sadržaja promenljivih $name i $agejei f(“%  i  %d    ld”     )printf(“%s is %d years old”, $name, $age);

printf() porodica

Dohvatanje delova stringaZa “izvlačenje” dela stringa u definisanom intervalu koristi se funkcija substr()Dohvatanje svega sem prvog karakteraDohvatanje svega sem prvog karaktera$result = substr($string, 1);Dohvatanje prvih 8 karakteraj p$result = substr($string, 0, 8);Dohvatanje dela teksta pre @

( ( ))$local_part = substr($email, 0, strpos($email, ‘@’));Dohvatanje poslednja 4 karaktera$result = substr($email   4);$result = substr($email, ‐4);

Pristup katekterima u stringuPristup pojedinačnim karakterima u stringu može da se uradi pomoću {}Stavljanje da svaki drugi karakter bude veliko slovoStavljanje da svaki drugi karakter bude veliko slovo

$len = strlen($string);( g);for($i = 0; $i < $len; $i++) {if($i % 2) {

i { i}    ( i { i})$string{$i} = strtoupper($string{$i});}}}

Rad sa formatiranim stringomDohvatanje dela stringa koji je u nekom obliku formatiranogstringa vrši se pomoću sscanf()

    f( i  “%d %d %d %d %d”)$parts = sscanf($string, “%d.%d.%d.%d:%d”);Za $string =“127.0.0.1:6137”Array(([0] => 127[1] => 0[2]  > 0[2] => 0[3] => 1[4] => 6137))Problem kod korišćenja funkcije sscanf() je što mora da bude potpuno u skladu sa formatom i da počne od početka stringa

Modifikacija stringaPrvi način modifikacija stringa je zamene dela stringa nekim drugim, pomoću funkcije substr_replace()A i   f k ij     i i l i  i   i    Argumenti ove funkcije su: originalni string, string za zamenu i pozicija odakle se zamena vrši

Zamene posladnje četiri cifre sa X$len = strlen($ccnum);$len = strlen($ccnum);$newnum = substr_replace($ccnum, str_repeat('X', 4), $len ‐ 4);

Zamene više delovaFunkcija str_replace() služi da se pomoću nje zamene svi substringovi unutar jednog stringa sa željenimP i     f k ij  j   i  k ji    ži    Prvi argument ove funkcije je string koji se traži, a drugi je onaj kojim će se menjati prvi, dok je treće originalni stringoriginalni stringAko se svako pojavljivanje :) želi zameniti sa <imgsrc=”/smiley.png”/>y p g$new_subject = str_replace( ‘:)’ , ‘<imgsrc=”/smiley.png”/>’, $subject);

Upotreba str_ireplace()Kada je zamene potrebna da se uradi bez vođenja računa o case sensitive, koristi se funkcija str ireplace()str_ireplace()function br2nl($subject){{return str_ireplace(“<br>”, “\n”, $subject);}}br2nl je skraćenica od break line to new line, što znači zamena svakog taga <br> sa /nPostoji i skraćenica nl2br

Rad sa nizovimaObe funkcije, str_replace() i str_ireplace(), mogu da rade isa nizovima kao argumentima

$emoticons = array( ‘:)’ => ‘<img src=”/smiley.png”/>’,‘;)’ => ‘<img src=”/wink png”/>’,;)   >  <img src /wink.png />,‘:(‘ => ‘<img src=”/frown.png”/>’);

$new_subject = str_replace( array_keys($emoticons),array_values($emoticons), $subject);

Regularni izraziRegularni izrazi u PHPu mogu biti u dve forme tj. oblika: PCRE i POSIX.PCRE   k   i j  j  k i  P l C ibl  PCRE se ovako nazivaju jer koriste Perl Compatible Regular Expression biblioteku da obezbede korišćenje regexps sa istom sintakso i na isti način kao i u Perluregexps sa istom sintakso i na isti način kao i u Perlu.POSIX regularni izrazi (familija ereg_ i split()) su malo sporiji nego njihovi ekvivalenti u PCRE, “not‐binary p j g j ysafe”, manje fleksibilni i manje se preporučuju

PCRE SintaksaPCRE Sintaksa

PaterniPatern je pravilo po kome se vrši provera, npr. \d{5}‐\d{4}Testiranje da li string $subject koristi definisani patern je pomoću funkcije preg_match()P  j      / /Patern je zatvoren unutar / /

if(preg_match(“/\d{5}‐\d{4}/”, $subject)) {//  h// matches}

Z  d fi i j   kl j   d đ  d l   t i  ili  l   t i  Za definisanje poklapanja određenog dela stringa ili celog stringa sa paternom koristi se $ i ^

if(preg match(“/^\d{5} \d{4}$/”  $subject)) {if(preg_match( /^\d{5}‐\d{4}$/ , $subject)) {// matches a ZIP+4 exactly}

ModifikatoriSopstveni opsezi mogu se kreirati pomoću []Npr. cifre od 2 do 9 su [2‐9]

Ekstrakcija stringa paternomPored toga što se želi pronaći poklapanje, viši nivo je i dohvatanje tog dela stringa za koji se ustanovi poklapanje sa paternompoklapanje sa paternomDa bi se ovo uradilo mora se grupisati onaj deo paterna za koji želi da se izvrši ekstrakcija teksta  za koji želi da se izvrši ekstrakcija teksta, /(\d{5})‐(\d{4})/U ovom slučaju rezultat vraćenog stringa je u formi U ovom slučaju rezultat vraćenog stringa je u formi niza, jer postoji više od jednog stringa koji se dohvata

Primer$string = ‘My zipcode is 21797‐2046’;if(preg_match(“/(\d{5})‐(\d{4})/”, $string, $matches)) {print r($matches);print_r($matches);}

AArray([0] => 21797‐2046 // patern u celini[0]  > 21797 2046 // patern u celini[1] => 21797 // prvi deo paterna grupisan sa ()[2] => 2046)

Zamena dela stringa paternomPomoću regularnih izraza se može izvršiti i zamene dela stringaOvo je slično funkciji str replace()Ovo je slično funkciji str_replace()Za ove potrebe koristi se preg_replace()Prvi argument je patern kojim se pronalazi tekst, koji se Prvi argument je patern kojim se pronalazi tekst, koji se želi zameniti. Drugi argument je tekst kojim želi da se izvrši zamena, i treći je originalni string

  b   b l     l  dNpr, izbacivanje simbola @ iz email adresenew_subject = preg_replace(“/(\S+)@(\S+)/”, ‘\1 at \2’, $subject);Tako ‘license@php net’ postaje ‘license at php net’Tako [email protected]  postaje license at php.net.

Deljenje stringaDeljenje stringa u delove moguće je pomoću tri funkcije: explode(), split(), i preg_split().

Najjednostavniji ali najbrži oblik je funkcija explode()$i f     ()$info = array();$lines = file(“/etc/passwd”);foreach($lines as $line) {foreach($lines as $line) {$info[] = explode(‘:’, $line);}}

Deljenje stringasplit() je POSIX funkcija i skoro da je identična sa preg_split()Ob i     ć i  l ih i   i Obzirom na mogućnosti regularnih izraza, separatori se mogu mnogo preciznije i dinamički definisati , preg split() ima mnogo veće mogućnosti  ali je zato i preg_split() ima mnogo veće mogućnosti, ali je zato i sporija$parts = preg_split(“/\s+/”, $subject);p p g p j

Zend Technologies

Napredno web programiranjeweb programiranje