Posix extended regex für HTML links

15/10/2007 - 00:56 von Andreas Volz | Report spam
Hallo,

kann mir jemand mit einer regex für html-Seiten helfen. Ich nutze boost
regex mit Option boost::regex::extended | boost::regbase::icase. Ich
möchte alle Links aus HTML-Seiten parsen.

Das ist mein erster Ansatz:

"<a[[:space:]]+" // tag start and space
"href[[:space:]]*=" // href tag
"['\"]([^'\"]*)['\"][[:space:]]*>" // url

Hat soweit funktioniert um alle reinen URL's zu bekommen. Ich hàtte
aber auch noch gerne den Link-Text dazu. z.B.

<a href='test.html'><font color=black>Test</font></a>

Ich möchte also "test.html" und "Test", aber den Kram dazwischen nicht.

Mein Problem fàngt schon mal an einfach den ganzen <a> bis </a> Tag zu
erfassen. Wie würde z.B. eine Regex aussehen die *alles* zwischen den
Paaren <a> und </a> erfasst? Irgendwie schaffe ich es mit der
[^]-Syntax nur auf einzelne Zeichen am Ende zu matchen.

Als Alternative habe ich auch überlegt libxml als Parser zu nutzen,
aber das scheint mir etwas überdimensioniert für dieses Problem.

Gruß
Andreas
 

Lesen sie die antworten

#1 Sven Geggus
15/10/2007 - 10:05 | Warnen spam
Andreas Volz wrote:

Als Alternative habe ich auch überlegt libxml als Parser zu nutzen,
aber das scheint mir etwas überdimensioniert für dieses Problem.



Huh? ich hàtte jetzt xmlstarlet vorgeschlagen:

xmlstarlet sel --html -T -t -m "//*[local-name()='a']" -v @href -n foo.html

Sven

Microsoft ist offenbar die einzige Firma, die in der Lage ist, ein mit
Office nicht kompatibles Bürosoftwarepaket einzuführen.
(Florian Weimer in de.alt.sysadmin.recovery)
/me is , http://sven.gegg.us/ on the Web

Ähnliche fragen