8.11. Wie ersetze ich in einem Text, jedoch nicht innerhalb von HTML-Tags?Antwort von Johannes FrömterMit 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); |
||
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 |