Ich versuche, einen regulären Ausdruck zu schreiben, um URLs so umzuschreiben, dass sie auf einen Proxy-Server verweisen.
%Vor%Die Idee dieses Ausdrucks ist ziemlich einfach, finde grundsätzlich Instanzen von "src = '/" oder "src =' //" und füge an dieser Stelle eine PROXY-URL ein. Dies funktioniert im Allgemeinen, aber gelegentlich habe ich Fälle gefunden, in denen ein Literal "$ 1" in der Ergebniszeichenfolge endet.
Das ergibt für mich keinen Sinn, denn wenn es keine Übereinstimmung gäbe, warum würde es dann überhaupt etwas ersetzen?
Leider kann ich nicht ein einfaches Beispiel dafür geben, das ist bisher nur bei sehr großen Strings der Fall, aber ich würde gerne konzeptuell wissen, was diese Art von Sache passieren lässt.
Nebenbei habe ich versucht, diesen Ausdruck mit einem positiven Lookbehind wie folgt neu zu schreiben:
%Vor%Aber das endet mit proxyStr TWICE in der Ausgabe, wenn die Eingabezeichenfolge "src = '//" enthält. Das ergibt auch wenig Sinn, weil ich dachte, dass "src=" zweimal in der Eingabe vorhanden sein müsste, damit proxyStr zweimal in der Ausgabe endet.
Wenn proxyStr = "10.15.15.15:8008/proxy?url=http://"
, wird die Ersatzzeichenfolge "0.15.15.15:8008/proxy?url=http://"
. Es enthält einen Verweis auf die Gruppennummer 110, die es sicher nicht gibt.
Sie müssen sicherstellen, dass Ihre Proxy-Zeichenfolge nicht in einer Ziffer beginnt. In Ihrem Fall können Sie dies tun, indem Sie den letzten Schrägstrich nicht erfassen und die Ersetzungszeichenfolge wie folgt in "/"+proxyStr
ändern:
Bearbeiten:
Rawling hat darauf hingewiesen, dass die Regexp-Bibliothek von .NET dieses Problem anspricht: Sie kann 1
in geschweifte Klammern einschließen, um falsches Aliasing zu vermeiden, zB:
Was Sie tun, kann nicht getan werden. .NET hat Probleme beim Interpolieren von Variablen wie diesem. Ihr Problem besteht darin, dass Ihre Proxy-Zeichenfolge mit einer Zahl beginnt: proxyStr = "10.15.15.15:8008/proxy?url=http://"
Wenn du dies mit deinem kombinierst, muss das Regexding nach backreference
0
suchen, das nicht existiert.
Sehen Sie, was ich hier meine.
Sie können dies beheben, indem Sie etwas anderes abgleichen oder indem Sie die Ersatzzeichenfolge manuell anpassen und konstruieren usw. Verwenden Sie, was Ihnen am besten passt.
In der zweiten Version, ich glaube, ProxyStr erscheint zweimal, weil Sie es noch einmal einfügen. Probieren Sie
aus %Vor%