Preg_replace pattern moet alleen een heel woord vervangen
Door
Mark Kwebeman
op 25-02-2018 11:21
gewijzigd op 25-02-2018 11:36
1.808 views
Ik heb een preg_replace pattern dat alleen de woorden vervangt in een tekst die tussen <p> en </p> staat. Dat werkt goed. Alleen iets te goed. Het probleem wat ik nu heb is dat ik alleen een geheel woord wil vervangen als die voorkomt en niet een deel van een woord.
Voorbeeld: het woord "strand" wordt vervangen in de tekst voor een link. Maar ook een deel van het woord "zandstrand" wordt vervangen en komt er uit te zien als: zand<a href="#">strand</a>. Het woord "zandstrand" zou in dit geval genegeerd moeten worden.
Dat idee had ik ook al, maar waar ik dit ook plaats. Het probleem blijft of wordt zelfs erger. Als ik hier $pattern = '|^(<p[^>]*>.*)('. preg_quote($word, '|') .')(.*</p>)$|mui/b'; van maak, dan verdwijnt de hele content. Of doe ik dit nu verkeerd?
Let op dat je in je $pattern nu de "/" als delimiter gebruikt, maar in preg_quote() nog steeds de "|" meegeeft.
(persoonlijk geef ik de voorkeur aan "/", omdat je je regex-en dan redelijk naadloos naar javascript-land kunt meenemen).
Het script vervangt binnen de content alleen de aangegeven woorden in paragrafen, zodat de alt of title in afbeeldingen en video's ook niet meegenomen worden.
(persoonlijk geef ik de voorkeur aan "/", omdat je je regex-en dan redelijk naadloos naar javascript-land kunt meenemen).
En het #-teken? Wellicht is dat nog beter als delimiter?
In PHP is het #-teken misschien handiger? Regexen portable houden, weet niet of dat echt zinnig is?