Forudgående søgning i PHP regulære udtryk
Sommetider skal man løse en opgave af denne type: find
strengen 'aaa' og erstat den med '!',
men kun hvis der efter 'aaa' står
'x', mens 'x' selv
ikke skal erstattes. Hvis vi forsøger at løse opgaven
'direkte', vil det ikke lykkes:
<?php
preg_replace('#aaax#', '!', 'aaax'); // bliver '!', men skal være '!x'
?>
For at løse opgaven er der brug for en måde at sige,
at 'x' ikke skal erstattes. Dette gøres
ved hjælp af specielle parenteser (?= ),
der kun kigger, men ikke tager med.
Disse parenteser kaldes positiv forudgående søgning
forud. Positiv - fordi 'x'
(i vores tilfælde) skal være der - kun så vil
erstatningen finde sted.
Lad os anvende disse parenteser til at løse vores opgave:
<?php
preg_replace('#aaa(?=x)#', '!', 'aaax'); // returnerer '!x'
?>
Der findes også negativ forudgående søgning forud
- (?! ) - den siger, omvendt, at
der skal mangle noget. I det næste eksempel
sker erstatningen kun, hvis der ikke står 'x'
efter 'aaa':
<?php
preg_replace('#aaa(?!x)#', '!', 'aaab'); // returnerer '!b'
?>
Der gives en streng, der indeholder funktionsnavne:
<?php
$str = 'func1() func2() func3()';
?>
Få et array med funktionsnavne fra strengen.
Der gives en streng med et tag:
<?php
$str = '<a href="" class="eee" id="zzz">';
?>
Få et array med attributnavne for dette tag.