Hallo mormel,
Schauen wir uns doch Deinen Ausdruck mal an:
| $fin =~ s%(<a href=")((?!http|>).*?/)((?!/).*?)(.html)(".*?</a>)%%gis;
^^^^ ^^^^^
(1) (2)
(1) Dieser Ausdruck ist nicht greedy, also bekommt er sowieso nur alles bis zum ersten / mit.
(2) Diese Assertion ist nicht notwendig, da Du ja bereits vorher am /-Zeichen Schluss machst.
Daher: Der Ausdruck muss greedy werden. Problem dabei: Er frisst dann viel zu viel. Also muss man hier ein bisschen tricksen:
$fin =~ s%(<a\s+href=")((?!http|>)[^"]+/)(.*?)(.html)(".*?</a>)%$1$2bar.jsp$5%gis;
Das "-Zeichen begrenzt ja den Attributwert - innerhalb des Attributes kann ich aber ruhig einen Ausdruck, der greedy ist, verwenden.
sollte doch eigentlich ganz einfach sein, oder?
Es ist nicht trivial, wie Du siehst. Ich möchte mir desweiteren nicht ausmalen, was der Ausdruck anstellt, wenn Du ihn auf invalides HTML anwendest...
Christian
Hast Du einen Beitrag? Nur her damit!
http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[