Archiv verlassen und diese Seite im Standarddesign anzeigen : negative lookbehind assertion
Servus,
ich probiere grad verzweifelt n Regularen Ausdruck zu generieren der mir alle src und href attribute aus einen HTML Quelltext holt die nicht mit http:// beginnnen aber irgendwie bekomm ich das mit der negativen lookbehind assertion nicht hin.
Wo liegt mein Fehler?
(href|src)=("|')(?<!http://)(.*?)\2
Jan Krüger
08.09.2008, 17:19
Generell ist hier das Problem, dass eine Assertion nicht automatisch Zeichen überspringt.
Angenommen, du willst den String src="http://example.org/..." untersuchen. Die Regexp-Engine hat bis jetzt den ersten Teil des Strings (src=") abgearbeitet. Nun ist sie an der Stelle angekommen, an der die Assertion geprüft wird. Dazu wird das src=" angesehen. Da src=" niemals mit dem String http:// endet, ist diese Assertion immer wahr.
An dieser Stelle ist eine Negative Lookahead Assertion angesagt; die überprüft dann im noch folgenden Text, z.B. http://example.org/...", dass dieser nicht mit http:// beginnt. Das würde dann wie gewünscht fehlschlagen.
Hmm das muss ich mir wohl noch mal genauer anschauen dachte bisher ich hätte Assertion verstanden aber dem scheint wohl doch noch nicht so.
Hast du evl. einen Link oder Buchempfehlung wo auf Assertions genauer eingegangen wird?
ps: danke so klappts
(href|src)=("|')(?!http://)(.*?)\2
perldoc perlre
http://perldoc.perl.org/perlre.html
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.