Προβολή προς τα εμπρός στις κανονικές εκφράσεις της PHP
Μερικές φορές χρειάζεται να λύσουμε ένα πρόβλημα του τύπου: βρες
τη συμβολοσειρά 'aaa' και αντικατέστησέ την με '!',
αλλά μόνο αν μετά την 'aaa' ακολουθεί
'x', ενώ το ίδιο το 'x' να μην
αντικαθίσταται. Αν προσπαθήσουμε να λύσουμε το πρόβλημα
'κατευθείαν', δεν θα τα καταφέρουμε:
<?php
preg_replace('#aaax#', '!', 'aaax'); // θα γίνει '!', αλλά πρέπει '!x'
?>
Για να λυθεί το πρόβλημα χρειάζεται ένας τρόπος να πούμε,
ότι το 'x' δεν πρέπει να αντικατασταθεί. Αυτό γίνεται
χρησιμοποιώντας ειδικές αγκύλες (?= ),
που απλά κοιτούν, αλλά δεν παίρνουν μαζί τους.
Αυτές οι αγκύλες ονομάζονται θετική προβολή
προς τα εμπρός. Θετική - γιατί το 'x'
(στην περίπτωσή μας) πρέπει να υπάρχει - μόνο τότε
θα πραγματοποιηθεί η αντικατάσταση.
Ας εφαρμόσουμε αυτές τις αγκύλες για να λύσουμε το πρόβλημά μας:
<?php
preg_replace('#aaa(?=x)#', '!', 'aaax'); // επιστρέφει '!x'
?>
Υπάρχει και αρνητική προβολή προς τα εμπρός
- (?! ) - αυτή, αντίθετα, λέει ότι
κάτι δεν πρέπει να υπάρχει. Στο επόμενο παράδειγμα
η αντικατάσταση θα πραγματοποιηθεί, μόνο αν μετά την 'aaa'
δεν ακολουθεί 'x':
<?php
preg_replace('#aaa(?!x)#', '!', 'aaab'); // επιστρέφει '!b'
?>
Δίνεται μια συμβολοσειρά, που περιέχει ονόματα συναρτήσεων:
<?php
$str = 'func1() func2() func3()';
?>
Λάβετε έναν πίνακα με τα ονόματα των συναρτήσεων από τη συμβολοσειρά.
Δίνεται μια συμβολοσειρά με μια ετικέτα:
<?php
$str = '<a href="" class="eee" id="zzz">';
?>
Λάβετε έναν πίνακα με τα ονόματα των χαρακτηριστικών αυτής της ετικέτας.