Priekšskatīšanās regulārajās izteiksmēs PHP
Dažreiz ir jāatrisina šāda veida uzdevums: atrast
virkni 'aaa' un aizstāt to ar '!',
bet tikai tad, ja aiz 'aaa' atrodas
'x', bet pašu 'x' tajā pašā laikā
neaizstāj. Ja mēs mēģināsim atrisināt uzdevumu
'uz priekšu', mums nekas neizdosies:
<?php
preg_replace('#aaax#', '!', 'aaax'); // būs '!', bet vajag '!x'
?>
Lai atrisinātu uzdevumu, ir nepieciešams veids, kā pateikt,
ka 'x' nevajadzētu aizstāt. Tas tiek darīts
ar speciālo iekavu (?= ) palīdzību,
kuras tikai skatās, bet nepaņem līdzi.
Šīs iekavas sauc par pozitīvo priekšskatīšanos
uz priekšu. Pozitīvs - jo 'x'
(mūsu gadījumā) ir jābūt - tikai tad
notiks aizstāšana.
Pielietosim šīs iekavas, lai atrisinātu mūsu uzdevumu:
<?php
preg_replace('#aaa(?=x)#', '!', 'aaax'); // atgriezīs '!x'
?>
Pastāv arī negatīvā priekšskatīšanās uz priekšu
- (?! ) - tā, gluži pretēji, saka, ka
kaut kam nevajadzētu būt. Nākamajā piemērā
aizstāšana notiks tikai tad, ja aiz 'aaa'
neatrodas 'x':
<?php
preg_replace('#aaa(?!x)#', '!', 'aaab'); // atgriezīs '!b'
?>
Dota virkne, kas satur funkciju nosaukumus:
<?php
$str = 'func1() func2() func3()';
?>
Iegūstiet funkciju nosaukumu masīvu no virknes.
Dota virkne ar tagu:
<?php
$str = '<a href="" class="eee" id="zzz">';
?>
Iegūstiet šī taga atribūtu nosaukumu masīvu.