Regulaaravaldiste eesvaade PHP-s
Mõnikord on vaja lahendada sellist tüüpi ülesannet: leida
string 'aaa' ja asendada see '!'-ga,
ainult siis, kui pärast 'aaa' on
'x', kuid 'x' ennast
ei asendata. Kui püüame ülesannet lahendada
'otse', siis meil ei õnnestu:
<?php
preg_replace('#aaax#', '!', 'aaax'); // saab '!', aga peaks olema '!x'
?>
Ülesande lahendamiseks on vaja võimalust öelda,
et 'x' ei tohiks asendada. Seda tehakse
spetsiaalsete sulgude (?= ) abil,
mis lihtsalt vaatavad, kuid ei võta endaga kaasa.
Neid sulgusid nimetatakse positiivseks eesvaateks
ettepoole. Positiivne - kuna 'x'
(meie puhul) peab olema - alles siis
toimub asendamine.
Rakendame neid sulgusid meie ülesande lahendamiseks:
<?php
preg_replace('#aaa(?=x)#', '!', 'aaax'); // tagastab '!x'
?>
On olemas ka negatiivne eesvaade ettepoole
- (?! ) - see, vastupidi, ütleb, et
midagi ei peaks olema. Järgmises näites
toimub asendamine ainult siis, kui pärast 'aaa'
ei ole 'x':
<?php
preg_replace('#aaa(?!x)#', '!', 'aaab'); // tagastab '!b'
?>
Antud string, mis sisaldab funktsioonide nimesid:
<?php
$str = 'func1() func2() func3()';
?>
Hankige stringist funktsioonide nimede massiiv.
Antud string siltiga:
<?php
$str = '<a href="" class="eee" id="zzz">';
?>
Hankige selle sildi atribuutide nimede massiiv.