Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi,

ich habe die Aufgabe erhalten, eine HTML-Datei nach Informationen der enthaltenen Links abzugrasen. Es soll vereinfachend angenommen werden, daß ein Link nicht über mehrere Zeilen verteilt sei. Es sollen das href-Attribut, also die Zieladresse, sowie der im Tag enthaltene Text ausgegeben werden.

Die Aufgabe möchte ich als Gelegenheit wahrnehmen, mich ein wenig mit den regulären Ausdrücken zu befassen. Ich bin auch schon kurz vorm Ziel, aber nun verlassen mich die Kenntnisse über reguläre Ausdrücke.

Langer Rede kurzer Sinn. Hier stehe ich (Java-RegEx):

<a\\s+[^<>]*href=\\\"([^<>\\\"]*)\\\"[^<>]*>([^<>]*)</a>
Das ist mein bisher entwickeltes Pattern. Kurzer Überblick:
<a // Klar, nach einem a-Tag suchen

\\s+ // Danach muß mindestens ein Whitespace folgen

[^<>]* // Dann ein Haufen beliebiger Zeichen. Bis auf < oder >

href=\\\" // Irgendwann kommt auch ein href-Attribut vor

([^<>\\\"]*) // Mit einem Inhalt. Allerdings ohne <, > oder "

\\\" // Dann endet das href-Attribut

[^<>]* // Und danach kann noch einiges stehen. Wieder ohne < oder >

> // Der Start-Tag endet

([^<>]*) // Es folgt ein Inhalt, auch der muß ohne < oder > daherkommen

</a> // Und der Link ist fertig
Ich dachte mir das so, daß ich mittels Capturing Groups dann nur noch die Gruppen für jeden Fund durchgehe und ausgebe (bis auf Gruppe 0). Das funktioniert auch - fast. Je nachdem wie ich die runden Klammern der Capturing Groups setze, bekomme ich kein Ergebnis bis hin zu 3 Gruppen. Bei den 3 Gruppen enthält dann Gruppe 0 den ganzen Tag (vom "<a" bis zum "</a>"), Gruppe 1 auch und Gruppe 2 den Inhalt des href-Attributs. Ich habe versucht, mir das Prinzip der Capturing Groups anzulesen, aber irgendwie komme ich nicht ganz dahinter, wie der Parser dabei vorgeht. Es erschließt sich mir noch nicht. Ich hoffe, daß hier da jemand nachhelfen kann. Hier ein paar Beispiele:
Pattern: (<a\\s+[^<>]*href=\\\"([^<>\\\"]*)\\\"[^<>]*>([^<>]*)</a>)

Input: <a href="blubb">bla</a>

Output:

Group 0: <a href="blubb">bla</a>

Group 1: <a href="blubb">bla</a>

Group 2: blubb
Pattern: <a\\s+[^<>]*href=\\\"([^<>\\\"]*)\\\"[^<>]*>([^<>]*)</a>

Input: <a href="blubb">bla</a>

Output:

Group 0: <a href="blubb">bla</a>

Group 1: blubb
Pattern: <a\\s+[^<>]*href=\\\"[^<>\\\"]*\\\"[^<>]*>([^<>]*)</a>

Input: <a href="blubb">bla</a>

Output:

Group 0: <a href="blubb">bla</a>
Pattern: <a\\s+[^<>]*href=\\\"([^<>\\\"]*)\\\"[^<>]*>[^<>]*</a>

Input: <a href="blubb">bla</a>

Output:

Group 0: <a href="blubb">bla</a>
Pattern: <a\\s+[^<>]*href=\\\"[^<>\\\"]*\\\"[^<>]*>[^<>]*</a>

Input: <a href="blubb">bla</a>

Output:

Geschrieben

Das ganze ist im Rahmen einer Übung meiner Vorlesung zu bearbeiten. RegEx wurden angesprochen und die Übung dient eigentlich zum Anwenden der verschiedenen String-Methoden wie charAt() oder substring().

Ich wollte es aber etwas eleganter machen. Am liebsten wäre mir ein Zustandsautomat oder so gewesen, aber in der Kürze der Zeit zu viel.

Und XSLT wäre auch too much.

Bin aber auf etwas gestoßen. Das hier hilft:

<a\\s+[^>]*href=\\\"([^\\\"]*)\\\"[^>]*>((.*(?=</a>)))</a>

Die Quantifizierer und das alles sind mir klar. Nur die Capturing groups noch nicht. Warum muß der Link-Text doppelt gruppiert werden?

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...