RegEx - alles außerhalb eines löschen

Hallo,

ich versuchen hier gerade mittels eine RegEx einen String aus einem Html-Dokument zu isolieren - sprich: alles andere zu löschen.

Ich habe also etwas HTML

Seitentitel bla bla bla
Hier steht der Text, den ich behalten will
bla bla bla

don’t regex on html
Hallo Christian,

Regex auf HTML zu versuchen ist allgemein eine schlechte Idee.
Warum, wieso, weshalb ist hier sehr anschaulich festgehalten:
http://stackoverflow.com/questions/1732348/regex-mat…

Ein besseres vorgehen ist hier das HTML zu parsen und dann die nicht benoetigten Teile zu entfernen bzw nur die benoetigten Teile aus dem Document-Tree zu extrahieren.

PHP bietet dafuer ein Document Object Model an (http://www.php.net/manual/en/book.dom.php), falls du das nicht nutzen kannst gibt es auch externe Projekte, wie z.B. http://simplehtmldom.sourceforge.net/

Gruss
Stefan

Hallo Stefan,

Regex auf HTML zu versuchen ist allgemein eine schlechte Idee.
Warum, wieso, weshalb ist hier sehr anschaulich festgehalten:
http://stackoverflow.com/questions/1732348/regex-mat…

Ah ok, das war erhellend zu lesen. (Und unterhaltsam :smile:

Ein besseres vorgehen ist hier das HTML zu parsen und dann die
nicht benoetigten Teile zu entfernen bzw nur die benoetigten
Teile aus dem Document-Tree zu extrahieren.

PHP bietet dafuer ein Document Object Model an
(http://www.php.net/manual/en/book.dom.php), falls du das
nicht nutzen kannst gibt es auch externe Projekte, wie z.B.
http://simplehtmldom.sourceforge.net/

Die werd ich mir ansehen und dann mal gucken was ich (Intranet, etwas eingeschränkt) nutzen kann.

Merci, ich denke, das hilft mir weiter.

Christian

ich versuchen hier gerade mittels eine RegEx einen String aus einem Html-Dokument zu isolieren - sprich: alles andere zu löschen.

Der Text, den ich behalten will steht also innrhalb eines
divs, das ich als Suchmuster verwenden könnte.

Ein bekannter schlug mir folgendes vor:
$regex = ‚#(.*)( )(.*)( )(.*)#‘;
$visitors = preg_replace($regex,’$3’,$visitors);

aber das tut gar nix.
Kann mir hier jemand auf die Sprünge helfen?

Der Ansatz ist richtig, aber es wurde nicht auf die kleinigkeiten geachtet:
.* findet ALLES oder NICHTS und es können keine Zeilenumbrüche gefunden werden.
Und preg_replace ist ungeeignet, wenn man nur etwas heraussuchen möchte.

Besser ist folgende Lösung:

$regex = ‚# (.+?) #s‘;
if(preg_match($regex,$visitors,$match))
$visitors = $match[1];
.+? findet immer etwas, aber so wenig wie möglich
und der Parameter s am Ende des Ausdrucks sorgt dafür, dass auch Zeilenumbrüche gefunden werden können. (Wenn das nicht erforderlich ist, kann die s-Option auch weggelassen werden)

Weitere Informationen findet man in der Wikipedia: http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck

MfG Michael Engelke