de.comp.lang.php.* FAQ

8.11. Wie ersetze ich in einem Text, jedoch nicht innerhalb von HTML-Tags?

Keywords: ersetzen | begrenzen

Antwort von Johannes Frömter

Mit Regulären Ausdrücken kann man zwar wunderbar "positive Treffer" formulieren, aber das Gegenteil davon geht nur sehr schwer (abgesehen von negierten Zeichenklassen und Lookaheads/-behinds geht es nicht). Die Entscheidung, ob ein Treffer innerhalb eines HTML-Tags (also zwischen < und >) liegt oder nicht, muss man von PHP treffen lassen. Hierzu gibt es den Modifier e, der PHP das zweite Argument von preg_replace() als PHP-Code auswerten läßt.

Mit folgender Konstruktion kann man in $t alle Vorkommen von $s außerhalb von < und > durch $r ersetzen; die zweite Version ist besonders mit dem Modifier i interessant, um Wörter unabhängig von ihrer Groß-/Kleinschreibung unter Beibehaltung der Schreibweise hervorzuheben:

// $s in $t durch $r ersetzen:
preg_replace("/((<[^>]*)|$s)/e", '"\2"=="\1"? "\1":"$r"', $t);

// $s case-insensitive in $t hervorheben:
preg_replace("/((<[^>]*)|$s)/ie", '"\2"=="\1"? "\1":"<b>\1</b>"', $t);

Valid HTML 4.01! Valid CSS!

8.11. Wie ersetze ich in einem Text, jedoch nicht innerhalb von HTML-Tags?
http://www.php-faq.de/q/q-regexp-ersetzen.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team