Pogled napred u PHP regularnim izrazima
Ponekad je potrebno rešiti problem ovog tipa: pronaći
string 'aaa' i zameniti ga sa '!',
ali samo ako iza 'aaa' stoji
'x', a sam 'x' pritom
ne zameniti. Ako pokušamo da rešimo problem
'direktno', nećemo uspeti:
<?php
preg_replace('#aaax#', '!', 'aaax'); // biće '!', a treba '!x'
?>
Za rešavanje zadatka potreban je način da se kaže,
da 'x' ne treba zameniti. To se radi
pomoću specijalnih zagrada (?= ),
koje samo 'gledaju', ali ne uzimaju sa sobom.
Ove zagrade se zovu pozitivni pogled napred
(positive lookahead). Pozitivni - jer 'x'
(u našem slučaju) mora da postoji - samo tada
će se izvršiti zamena.
Hajde da primenimo ove zagrade za rešavanje našeg zadatka:
<?php
preg_replace('#aaa(?=x)#', '!', 'aaax'); // vratiće '!x'
?>
Postoji i negativni pogled napred (negative lookahead)
- (?! ) - on, obrnuto, govori da
nečega ne sme biti. U sledećem primeru
zamena će se izvršiti, samo ako iza 'aaa'
ne stoji 'x':
<?php
preg_replace('#aaa(?!x)#', '!', 'aaab'); // vratiće '!b'
?>
Dat je string koji sadrži imena funkcija:
<?php
$str = 'func1() func2() func3()';
?>
Preuzmite niz imena funkcija iz stringa.
Dat je string sa tagom:
<?php
$str = '<a href="" class="eee" id="zzz">';
?>
Preuzmite niz imena atributa ovog taga.