phpbar.de logo

Mailinglisten-Archive

[php] alles ausser <

[php] alles ausser <

Thomas Koudela thomas at koudela.net
Sam Sep 23 13:38:36 CEST 2006


Hallo Stephan.

 > Ich tüftle gerade an einem regulären Ausdruck.
 > Ich möchte alle Html - Tags aus einem Html - Skript entfernen
 > und suche nach einer Lösung.
 >
 > [...]
 >
 > $inhalt1 = preg_replace("#(<)([\w\W]+)(>)#","",$inhalt);
 >
 > Leider loescht diese Variante den gesamten Text. Ich möchte nur die
 > Html - Kommandos entfernen. Also eine Aussage wie 'nicht <' einbauen ?

Nach den Standardeinstellung wird die Pattern Syntax greedy 
interpretiert, d.h. preg_replace versucht so viele Zeichen wie möglich 
bei [\w\W]+ zu finden. "<p>Dies ist <b>ein</b> (Ab-)Satz.</p>" wird 
dadurch zu "", weil nach der Klammer auf, die letzte verfügbare Klammer 
gesucht wird, bei der [\w\W]+ dazwischen passt.

Dies kannst Du ändern indem Du entweder den Quantifier Minimizer "?" 
verwendest oder mit "(?U)" PCRE_UNGREEDY setzt.

Das sieht dann so:
'/<(.*?)>/'
oder so:
'/(?U)<.*>/'
oder mit minimalen Unterschieden so:
'/<[\w\W]+?>/'
oder so:
'/(?U)<[\w\W]+>/'
aus.

Gruß, Thomas

php::bar PHP Wiki   -   Listenarchive