Programeri.com

Programeski Web Blog

PHP i RegEx

Septembar10

Regular expressions su postale veoma vazan faktor u bilo kojem programskom/skriptnom jeziku.

Evo i nekoliko primjera za PHP:

Kako prepoznati text u stringu

<?php
          $string = 'abcdefghijklmnopqrstuvwxyz0123456789';
          echo preg_match("/abc/", $string);
?>


Gornji code ce echo ’1′ ili true.

Kako prepoznati pocetak texta u stringu

<?php
          $string = 'abcdefghijklmnopqrstuvwxyz0123456789';
          if(preg_match("/^abc/", $string)) {
                 echo 'Pronasli smo abc';
          }else{
                 echo 'Nema - nestalo';
          }
?>

Kao sto mozete primjetiti ^ znaci pocetak teksta.

Sta ako moram da brinem za velka i mala slova

<?php
          $string = 'abcdefghijklmnopqrstuvwxyz0123456789';
          if(preg_match("/^ABC/i", $string)) {
                 echo 'Pronasli smo abc';
          }else{
                 echo 'Nema - nestalo';
          }
?>

Kao sto mozete primjetiti i znaci da ne obracamo paznu na velicinu slova. Ako izbacimo i onda cemo dobiti ‘Nema – nestalo’ zato sto pocetak teksta pocinje sa malim slovima.

Kako prepoznati kraj texta u stringu

<?php
          $string = 'abcdefghijklmnopqrstuvwxyz0123456789';
          if(preg_match("/89\z/", $string)) {
                 echo 'Pronasli smo 89';
          }else{
                 echo 'Nema - nestalo';
          }
?>

Kao sto mozete primjetiti \z znaci kraj teksta. Mozete isto koristiti $

Kako prepoznati vise od jedne varijante teksta

<?php
          $string = 'kuca';
          if(preg_match("/k[uio]ca/", $string)) {
                 echo 'Pronasli smo moguce rijeci - kuca, kica, koca';
          }else{
                 echo 'Nema - nestalo';
          }
?>

Kao sto mozete primjetiti [] znaci bilo koja slova/brojeve/znakove. U gornjem primjeru rijec kuca, kica, koca ce biti nadjena.

Sta ako zelim da sacuvam rezultat u variablu

<?php
          $string = 'kuca';
          if(preg_match("/k[uio]ca/", $string, $moja_variable)) {
                 echo 'Pronasli smo moguce rijeci - kuca, kica, koca';
          }else{
                 echo 'Nema - nestalo';
          }

          echo "<pre>". print_r($moja_variable,1) ."</pre>";
?>

$moja_variable ce imati sve vrijednosti koje su pronadjene.

Hajmo malo u negativu, nadji tekst koji ne postoji

<?php
          $string = 'abcefghijklmnopqrstuvwxyz0123456789';
          preg_match("/[^b]/", $string, $moja_variable);

          if(!empty($moja_variable)) {
                  foreach($moja_variable as $col => $val) {
                           echo $col . " -> " . $val . "
";
                  }
          }
?>

Kada koristite ^ u [] to znaci NOT. Znaci nadji tekst sve dok ne nadjes b u nasem primjeru.

Ako pokrenemo gornji program dobijemo
0 -> a

Sta ako sam htjeo da nadzem sve osim b?

<?php
          $string = 'abcefghijklmnopqrstuvwxyz0123456789';
          preg_match_all("/[^b]/", $string, $moja_variable);

          if(!empty($moja_variable)) {
                  foreach($moja_variable as $col => $val) {
                           echo $col . " -> " . $val . "
";
                  }
          }
?>

Onda koristite preg_match_all. Pokrenite program da vidite rezultat.
acefghijklmnopqrstuvwxyz0123456789

Sta da radim ako necu slova?

<?php
          $string = 'abcefghijklmnopqrstuvwxyz0123456789';
          preg_match_all("/[^0-9]/", $string, $moja_variable);

          if(!empty($moja_variable)) {
                  foreach($moja_variable as $col => $val) {
                           echo $col . " -> " . $val . "
";
                  }
          }
?>

Uvjek mozete dati range. Recimo od 0 do 9 (0-9) od a do g (a-g) od A do D (A-D) od a do Z (a-Z).

Ako neznate samo jedno slovo?

<?php
          $string = 'ovo izgleda super dobro';
          echo preg_match("/o.o/", $string, $moja_variable)
?>

Upisite . (tacku) za bilo koju rijec. Znaci mogli bi naci oko, ovo, ono, odo

Sta da radim ako nisam siguran da treba slovo, a necu da dobiem false?

<?php
          $string = 'php';
          echo preg_match("/ph*p/", $string, $moja_variable)
?>

Znaci, dobit cemo true zato sto * ce biti ignorisano. * znaci ako je tu super, prepoznaj, ako nije tu ignoriraj. * znaci 0 i vise slova. Uz * dolazi + sto znaci 1 i vise slova. Da smo koristili + u gornjem primjeru dobili bi false.

Ako zelite da kontrolistete koliko puta se broj ponavlja?

<?php
          $string = '555-444-3333';
          echo preg_match("/[0-9]{3}-[0-9]{3}-[0-9]{4}/", $string, $moja_variable)
?>

Znaci sa {} mozemo reci koliko puta da se broj ponovi. Da smo koristitli * isto bi dobili ’1′ ili true, zato sto * znaci 0 ili vise brojeva. + bi isto radio.

Specialni Karakteri
\d – Prepoznaje bilo koji broj
\D – Prepoznaje sve sto nije broj
\s – Prepoznaje prazan prostor (space)
\S – Prepoznaje sve sto nije prazan prostor (space)
\w – Prepoznaje sva slova i brojeve
\W – Prepoznaje sve sto nisu slova i brojevi

Evo primjera za gore

<?php
          $string = 'ab-ce*fg@ hi & jkl(mnopqr)stu+vw?x yz0>1234<567890';
          echo preg_match_all("/[\w]/", $string, $moja_variable)

          echo "<pre>". print_r($moja_variable,1) . "</pre>";
?>

Ako pokrenete gornji program, vidjecete da smo dobili samo slova i brojeve. Probajte ostale.
Sa \d mozete da prepoznate jeli text broj ili alpha string. Isto tako mozete koristiti [0-9]*

Regular expressions su veoma vazan dio programiranja, i ovaj tutorial bi mogo ici do zore :)

Postavite pitanje ako imate, i nacemo soluciju.

posted under Ostalo

Morate biti upisani da bit postavili komentar.

 

Log in to post a comment.