Vooruitkijken in PHP reguliere expressies
Soms moet je een taak van dit type oplossen: vind
de string 'aaa' en vervang deze door '!',
maar alleen als na 'aaa' een
'x' staat, en de 'x' zelf
daarbij niet vervangen. Als we proberen de taak
'op de brute force manier' op te lossen,
zal het ons niet lukken:
<?php
preg_replace('#aaax#', '!', 'aaax'); // wordt '!', maar moet '!x' zijn
?>
Om de taak op te lossen is een manier nodig om te zeggen,
dat 'x' niet vervangen moet worden. Dit wordt
gedaan met behulp van speciale haakjes (?= ),
die alleen kijken, maar niet meenemen.
Deze haakjes worden positief vooruitkijken
genoemd. Positief - omdat 'x'
(in ons geval) aanwezig moet zijn - alleen dan
vindt vervanging plaats.
Laten we deze haakjes toepassen om onze taak op te lossen:
<?php
preg_replace('#aaa(?=x)#', '!', 'aaax'); // retourneert '!x'
?>
Er is ook negatief vooruitkijken
- (?! ) - het zegt, in tegenstelling tot positief, dat
iets niet aanwezig moet zijn. In het volgende voorbeeld
vindt vervanging alleen plaats als na 'aaa'
geen 'x' staat:
<?php
preg_replace('#aaa(?!x)#', '!', 'aaab'); // retourneert '!b'
?>
Gegeven een string die functienamen bevat:
<?php
$str = 'func1() func2() func3()';
?>
Verkrijg een array met functienamen uit de string.
Gegeven een string met een tag:
<?php
$str = '<a href="" class="eee" id="zzz">';
?>
Verkrijg een array met de namen van de attributen van deze tag.