Thread Links filtern: reguläre ausdrücke
(18 answers)
Opened by Gast at 2003-09-07 16:34
Zerlegen wir die Regex doch mal:
Code: (dl
)
1 < # Eine spitze Klammer auf Du bist dir ueber die Bedeutung des '+' in regulaeren Ausdruecken wahrscheinlich nicht ganz im Klaren. Hast du perlrequick gelesen? Da HTML deutlich komplizierter ist, als deine Regex oben, solltest du fuer diese Aufgabe einen HTML-Parser nehmen, in diesem Fall am einfachsten HTML::LinkExtor. Ausnahme: Du kennst genau den Aufbau der <a href>-Tags und kannst deshalb mit einer eingeschraenkten Regex leben. Ein Beispiel: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 if ($date =~ / <a # spitze Klammer auf und 'a' \s+ # Eine Folge von einem oder mehr Whitespacezeichen href # Der Text 'href' \s* # Eine Folge von keinem oder mehr Whitespacezeichen = # Ein Gleichheitszeichen \s* # Eine Folge von keinem oder mehr Whitespacezeichen " # Ein Anfuehrungszeichen ([^"]+) # Eine Folge von einem oder mehr Zeichen, die kein Anfuehrungszeichen sind. # Die Folge wird sich in $1 gemerkt. " # Ein Anfuehrungszeichen \s* # Eine Folge von keinem oder mehr Whitespacezeichen > # Eine spitze Klammer zu /xi # Ende der Regex; Kommentare erlauben und ignore-case einschalten ) [...] Diese Regex erkennt schon einige <a href>-Tags, aber - das href muss der erste Parameter sein (kein <a style=... href=...>! ) - die URI muss in Anfuehrungszeichen stehen (was der HTML-Spec entspricht) - die Anfuehrungszeichen muessen doppelt sein (was nicht der HTML-Spec entspricht) - nach der URI duerfen keine weiteren Parameter stehen (kein <a href=... style=...>! ) Du siehst, da sind ziemlich viele Einschraenkungen, wenn man es mit einer simplen Regex parsen will. Nimm lieber das Modul. |