PHP i RegEx
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.