Kann nicht herausfinden, warum diese Regex nicht zutrifft

993
Jeff Atwood

Ich verwende Privoxy 3.0.10.0, um Webseiten zu filtern, bevor sie an den Browser weitergeleitet werden.

Ich kann nicht herausfinden, warum diese einfache Regex kein Umschreiben auslöst. Vielleicht hat jemand Erfahrener eine Idee:

Wenn Sie die Strg-U-Taste von Firefox drücken, um den HTML-Quellcode anzuzeigen:

<font color=#FF4AFF>JohnDoe</font> 

Hier ist meine Regex; Ich habe auch den Schalter "i" hinzugefügt, um den Fall zu ignorieren, ohne Erfolg

s|(<font color=.+?>JohnDoe</font>)|<span class=myclass>$1</span>|g 

Danke für jeden Hinweis.

2
Sollte dies nicht auf Serverfault verschoben werden? chakrit vor 14 Jahren 1
Angesichts der Antwort von RichieHindle: Sind Sie sicher, dass Sie ** das vollständige Original in ` ` Tags einbetten möchten , oder haben Sie erwartet, dass nur der `JohnDoe'-Teil kopiert wird, z. B.` JohnDoe` ? Nur um sicherzustellen, dass Sie ` JohnDoe` im Ergebnis nicht übersehen . Arjan vor 14 Jahren 1

3 Antworten auf die Frage

4
RichieHindle

Der Regex funktioniert gut, wie dieses Python-Beispiel zeigt:

import re print re.sub(r"(<font color=.+?>JohnDoe</font>)", r"<span class=myclass>\1</span>", "<font color=#FF4AFF>JohnDoe</font>") # Prints <span class=myclass><font color=#FF4AFF>JohnDoe</font></span> 

(Angenommen, Privoxy verwendet die gleiche Regex-Syntax, wobei die \1vs.- $1Differenz gesperrt ist, aber es sieht so aus.)

Ich schätze, das Problem liegt woanders - versuchen Sie es mit einem Regex, der nicht versagen kann, beispielsweise durch Ersetzen amit b, um zu sehen, ob er überhaupt eine Wirkung hat.

2
OverTheRainbow

Thansk Jungs. Es stellte sich heraus, dass Privoxy gierig war, und ich habe nicht bemerkt, dass es viel mehr Daten benötigte, als ich dachte.

0
chris

Sie sind sich nicht sicher, welche RE-Engine Sie verwenden, aber ändern Sie $ 1 in \ 1 - so werden Rückreferenzen normalerweise in Perl bezeichnet.

Manchmal müssen Sie \\ 1 verwenden, abhängig davon, in welchem ​​Format Sie den Regex schreiben. jtbandes vor 14 Jahren 0
Beim Umschreiben der URL von Apache würde man $ 1 verwenden. Sollte in diesem Fall tatsächlich \ 1 verwendet werden, würde ich erwarten, dass die Ausgabe " $ 1 " ist - was hoffentlich in der Frage notiert worden wäre ... Arjan vor 14 Jahren 1