Forutsikt i regulære uttrykk i PHP
Noen ganger må man løse en oppgave av denne typen: finn
strengen 'aaa' og erstatt den med '!',
men bare hvis det etter 'aaa' kommer
'x', mens 'x' i seg selv
ikke skal erstattes. Hvis vi prøver å løse oppgaven
'direkte', vil det ikke lykkes:
<?php
preg_replace('#aaax#', '!', 'aaax'); // blir '!', men skal være '!x'
?>
For å løse oppgaven trengs en måte å si
at 'x' ikke skal erstattes. Dette
gjøres ved hjelp av spesielle parenteser (?= ),
som bare ser, men ikke tar med seg.
Disse parentesene kalles positiv forutsikt
fremover. Positiv - fordi 'x'
(i vårt tilfelle) må være til stede - bare da
vil erstatningen skje.
La oss bruke disse parentesene for å løse vår oppgave:
<?php
preg_replace('#aaa(?=x)#', '!', 'aaax'); // returnerer '!x'
?>
Det finnes også negativ forutsikt fremover
- (?! ) - den sier, tvert imot, at
noe ikke skal være til stede. I det følgende eksempelet
vil erstatning skje bare hvis det ikke kommer
'x' etter 'aaa':
<?php
preg_replace('#aaa(?!x)#', '!', 'aaab'); // returnerer '!b'
?>
Det er gitt en streng som inneholder funksjonsnavn:
<?php
$str = 'func1() func2() func3()';
?>
Få en matrise med funksjonsnavn fra strengen.
Det er gitt en streng med en tagg:
<?php
$str = '<a href="" class="eee" id="zzz">';
?>
Få en matrise med attributtnavn for denne taggen.