Не могу понять, почему это регулярное выражение не применяется

661
Jeff Atwood

Я использую Privoxy 3.0.10.0 для фильтрации веб-страниц, прежде чем они будут переданы в браузер.

Я не могу понять, почему это простое регулярное выражение не вызывает переписывание. Может быть, у кого-то более опытного будет идея:

Вот как это выглядит, когда я нажимаю CTRL-U в Firefox для просмотра исходного кода HTML:

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

Вот мое регулярное выражение; Я также добавил переключатель «я», чтобы игнорировать регистр, но безрезультатно

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

Спасибо за любую подсказку.

2
Разве это не должно быть перенесено на сервер? chakrit 14 лет назад 1
Учитывая ответ RichieHindle: вы уверены, что хотите вставить ** полный ** оригинал в теги ` `, или вы ожидали, что будет скопирована только часть ` JohnDoe`, как` JohnDoe` ? Просто чтобы убедиться, что вы не пропустите ` JohnDoe` в результате. Arjan 14 лет назад 1

3 ответа на вопрос

4
RichieHindle

Само регулярное выражение работает нормально, как показано в следующем примере 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> 

(предполагается, что Privoxy использует тот же синтаксис регулярных выражений, запрещая \1против $1разницы, но похоже, что он делает.)

Я предполагаю, что проблема кроется в другом месте - попробуйте регулярное выражение, которое не может потерпеть неудачу, например, заменить aна b, чтобы увидеть, имеет ли оно какое-либо влияние.

2
OverTheRainbow

Спасибо, ребята. Оказывается, Privoxy был жадным, и я не заметил, что он собирал намного больше данных, чем я думал.

0
chris

Не уверен, какой движок RE вы используете, но попробуйте изменить $ 1 на \ 1 - так, по крайней мере, обратные ссылки обычно упоминаются в perl.

Иногда вам нужно будет использовать \\ 1, в зависимости от того, в каком формате вы пишете регулярное выражение. jtbandes 14 лет назад 0
При переписывании URL в Apache можно было бы использовать 1 доллар. Но если в этом случае действительно следует использовать \ 1, то я ожидаю, что результат будет ` $ 1` - что, надеюсь, было бы отмечено в этом вопросе ... Arjan 14 лет назад 1