dclp FAQ

FAQ der Newsgroups de.comp.lang.php.*

 
  • Increase font size
  • Default font size
  • Decrease font size

Reguläre Ausdrücke

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

E-MailDruckenPDFLesezeichen anlegen: Du musst dich einloggen um ein Lesezeichen für diesen Beitrag anzulegen. Es wird deiner persönlichen Lesezeichenliste hinzugefügt.

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);
Wie ersetze ich in einem Text, jedoch nicht innerhalb von HTML-Tags?
http://www.php-faq.de/q-regexp-ersetzen.html
 

Login