Ich arbeite an einem ASP.NET-Antwortfilter, der URLs neu schreibt, um in bestimmten Situationen auf eine andere Domäne zu verweisen.Hilfe mit negativem Lookbehind in regulären Ausdrücken
Da ASP.NET Chunks die Antwort schreibt, wird mein Filter mehrmals aufgerufen, bevor die Seite vollständig gestreamt wird. Das bedeutet, dass ich darauf achten muss, dass jeder Aufruf von Regex.Replace eine URL nicht doppelt ersetzt (Sie enden mit http://foo.comhttp://foo.com/path).
Um dies zu tun, ich versuche Ausdruck eine negative Lookbehind für das Ersetzen zu verwenden, aber es scheint nicht zu funktionieren:
content = Regex.Replace(content,"((?<!" + newDomain + ")" + match + ")", newDomain + match);
Dies schafft eine regex wie:
((?<!http://www.foo.com/)actual/url)
Allerdings scheint es nicht den Look zu respektieren und ich bekomme alles doppelt ersetzt.
Irgendwelche Ideen?
EDIT: Diese Regex funktioniert gut, wenn ich ein Werkzeug wie Regex Coach verwenden, um es gegen Beispieldaten zu testen.
EDIT 2: Hinzugefügt den Schrägstrich, es ist tatsächlich da.
Wo genau ist das "Match" Variable kommen? Um genau zu sein, haben Sie sie durch Parsing der URLs aus dem Inhalt erhalten? Wie sieht "Übereinstimmung" vor dieser Zeile aus? – mercator
Möchten Sie die Domain oder den Pfad ersetzen? Wie du sagst, bekommst du die Matches, die du in Regex Coach erwartest, aber du bekommst nicht die Ersatzaktion, die du erwartest. –
Wow, -1 zu allen meinen Antworten, ohne Feedback. –