Não consigo descobrir por que esse regex não se aplica

2

Estou usando o Privoxy 3.0.10.0 para filtrar páginas da Web antes que elas sejam repassadas para o navegador.

Não consigo descobrir por que esse simples regex não aciona uma reescrita. Talvez alguém mais experiente tenha uma idéia:

Aqui está o que parece quando eu clico no CTRL-U do Firefox para visualizar a fonte HTML:

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

Aqui está o meu regex; Também adicionei a opção "i" para ignorar maiúsculas e minúsculas

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

Obrigado por qualquer dica.

Jeff Atwood
fonte
1
Isso não deve ser movido para a falha do servidor?
chakrit
1
Dada a resposta de RichieHindle: você tem certeza de que deseja incorporar o original completo nas <span>tags ou esperava que apenas a JohnDoeparte fosse copiada <span class=myclass>JohnDoe</span>? Apenas para ter certeza de que você não está negligenciando <span class=myclass><font color=#FF4AFF>JohnDoe</font></span>o resultado.
Arjan #

Respostas:

4

O próprio regex funciona bem, como mostra este exemplo do Python:

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>

(supondo que o Privoxy use a mesma sintaxe regex, exceto a diferença \1vs. $1, mas parece que sim.)

Acho que o problema está em outro lugar - tente um regex que não pode falhar, como substituir apor b, para ver se está tendo algum efeito.

RichieHindle
fonte
2

Obrigado pessoal. Acontece que o Privoxy era ganancioso, e eu não percebi que estava pegando muito mais dados do que eu pensava.

Além do arco-íris
fonte
0

Não sabe ao certo qual mecanismo de ER você está usando, mas tente alterar o $ 1 para \ 1 - é assim que as referências anteriores geralmente são chamadas em perl.

chris
fonte
Às vezes, você precisará usar \\ 1, dependendo do formato em que estiver escrevendo o regex.
jtbandes
1
Na reescrita de URL do Apache, usaria $ 1. Mas, se \ 1 deve realmente ser usado neste caso, então eu esperaria que a saída seja <span class=myclass>$1</span>- que esperamos que teria sido observado na pergunta então ...
Arjan