Framåtblickande i PHP reguljära uttryck
Ibland behöver man lösa en uppgift av denna typ: hitta
strängen 'aaa' och ersätt den med '!',
men bara om efter 'aaa' står
'x', och själva 'x' ska samtidigt
inte ersättas. Om vi försöker lösa uppgiften
'direkt' kommer det inte att lyckas:
<?php
preg_replace('#aaax#', '!', 'aaax'); // blir '!', men ska vara '!x'
?>
För att lösa uppgiften behövs ett sätt att säga,
att 'x' inte ska ersättas. Detta görs
med hjälp av speciella parenteser (?= ),
vilka bara tittar, men inte tar med sig.
Dessa parenteser kallas positiv framåtblick
. Positiv - eftersom 'x'
(i vårt fall) måste finnas - bara då
kommer ersättningen att ske.
Låt oss använda dessa parenteser för att lösa vår uppgift:
<?php
preg_replace('#aaa(?=x)#', '!', 'aaax'); // returnerar '!x'
?>
Det finns också negativ framåtblick
- (?! ) - den säger, tvärtom, att
något inte ska finnas. I följande exempel
kommer ersättningen att ske, bara om efter 'aaa'
inte står 'x':
<?php
preg_replace('#aaa(?!x)#', '!', 'aaab'); // returnerar '!b'
?>
Given är en sträng som innehåller funktionsnamn:
<?php
$str = 'func1() func2() func3()';
?>
Få en array med funktionsnamn från strängen.
Given är en sträng med en tagg:
<?php
$str = '<a href="" class="eee" id="zzz">';
?>
Få en array med namnen på attributen för denna tagg.