000
20.04.2007, 14:34 Uhr
Yadgar
|
High!
Ich habe folgendes vor: aus lokal gespeicherten HTML-Seiten mit Nachrichten-Texten diverser internationaler Agenturen (über Afghanistan, was sonst?) soll jeweils der reine Nachrichtentext extrahiert werden. Da ich festgestellt zu haben glaube, dass diese Texte üblicherweise nach dem ersten <p>-Tag beginnen, entferne ich erst mal mit strchr alles, was vor diesem Tag steht.
Danach muss alles ab dem ersten Tag, der weder <p> noch </p> ist, abgeschnitten werden (den Algorithmus müsste man natürlich noch verfeinern, es kann ja sein, dass mitten im Text noch irgendwelche anderen Tags vorkommen). Dazu verwende ich dann eregi_replace() mit einem Regulären Ausdruck:
PHP 4: |
$reg ="((<)|(</))[^p]{1}.*"; eregi_replace($reg, "", $puffer);
|
Eigentlich sollte diese Anweisung bewirken, dass ab dem ersten öffnenden oder schließenden Tag, das nicht p (bzw. P) enthält (genauer, jedes andere Zeichen außer p (bzw. P) und null bis beliebig viele weitere Zeichen, alles durch einen Leerstring ersetzt wird.
Tut sie aber nicht, statt dessen löscht sie alles ab dem ersten </p>-Tag... was ja auch kein Wunder ist, da die Bedingung nicht eindeutig ist: der Parser kann nicht zwischen < am Anfang und nachfolgendem / als nichtzugelassenem Zeichen und </ am Anfang unterscheiden.
Aber wenn ich die Bedingung so formuliere, dass dieser Umstand berücksichtigt wird:
$reg ="(<([^p]&[^/]).*";
werden Nicht-<p>...</p>-Tags überhaupt nicht gefunden!
Was mache ich falsch?
Bis bald im Khyberspace!
Yadgar -- Flagmaker - ein Programmier-Blog |