Pogled naprej v regularnih izrazih PHP
Včasih je treba rešiti nalogo takšne vrste: najti
niz 'aaa' in ga zamenjati z '!',
vendar le, če je za 'aaa'
'x', sam 'x' pa
ne zamenjati. Če poskušamo rešiti nalogo
'na slepo', nam ne bo uspelo:
<?php
preg_replace('#aaax#', '!', 'aaax'); // bo '!', moralo bi biti '!x'
?>
Za rešitev naloge potrebujemo način, da povemo,
da 'x' ne smemo zamenjati. Naredi se
to s posebnimi oklepaji (?= ),
ki samo gledajo, vendar ne vzamejo s seboj.
Ti oklepaji se imenujejo pozitivni pogled
naprej. Pozitivni - ker mora biti 'x'
(v našem primeru) - šele takrat
bo prišlo do zamenjave.
Uporabimo te oklepaje za rešitev naše naloge:
<?php
preg_replace('#aaa(?=x)#', '!', 'aaax'); // vrne '!x'
?>
Obstaja tudi negativni pogled naprej
- (?! ) - ta, nasprotno, pravi, da
nečesa ne sme biti. V naslednjem primeru
bo prišlo do zamenjave le, če za 'aaa'
ni 'x':
<?php
preg_replace('#aaa(?!x)#', '!', 'aaab'); // vrne '!b'
?>
Podan je niz, ki vsebuje imena funkcij:
<?php
$str = 'func1() func2() func3()';
?>
Pridobite tabelo imen funkcij iz niza.
Podan je niz z oznako:
<?php
$str = '<a href="" class="eee" id="zzz">';
?>
Pridobite tabelo imen atributov te oznake.