regex хотел исключить строку

Это для удобства, но это - также lower-than-user-level диагностика. Можно изолировать проблему, у Вас есть с сервисом тот путь, например: у Joe есть сервер базы данных и клиент. Они не связываются. Проблема в сети? Сервер? Клиент?

Joe переходит к клиентской машине и открывает оболочку. Он использует telnet, как Вы описали:

telnet server.ip.com 3333

и вводит команду, как будто он был клиентской программой

WHO;

Сервер отвечает с

'11','JOE.CORP.COM'

(Это - очень немой сервер),

Таким образом Joe знает, что сетевой канал к работам сервера, и что его клиент, вероятно, не настроен правильно.

5
21.02.2012, 15:35
2 ответа

Математически говоря, если регулярное выражение распознает определенный набор исходных данных, то существует регулярное выражение, которое распознает дополнительный набор. Если Вы знаете, что регулярные выражения эквивалентны конечным автоматам, это очевидно: подкачайте принятие и непринятие состояний в автомате. Однако размер регулярного выражения для дополнения может вырасти экспоненциально с размером исходного регулярного выражения, таким образом, это является часто непрактично большим.

Регулярное выражение для “начинается http, конец с icon.ico и не содержите config.privoxy.org”:

^http([^c]|c[^o]|co[^n]|…|config\.privoxy\.or[^g])*(c(o(n(f(…o(rg?)?)?)?)?)?)?icon\.ico$

(Я надеюсь, что разобрался в нем. Обратите внимание, что существует довольно мало … для заполнения.)

К счастью, Privoxy принимает больше, чем математические регулярные выражения: это понимает расширения Perl, включая (?!foo) соответствовать пустой строке, когда это сопровождается чем-либо, но foo. Это - нулевая ширина отрицательное предварительное утверждение (нулевая ширина: соответствует пустой строке; предварительное утверждение: ограничивает то, что может прибыть сразу впоследствии; отрицательный: ограничение выражается с точки зрения того, что не может появиться), не regex отрицание.

^http(?!.*config\.privoxy\.org).*icon\.ico$

Отметьте это (?!…) должен использоваться с осторожностью: если Вы не обращаете внимание, это не могло бы означать то, что Вы думаете, что это означает. Например:

  • ^http(?!config\.privoxy\.org).*icon\.ico$ соответствия http://config.privoxy.org/icon.ico, потому что config\.privoxy\.org сразу не появляется после http префикс.
  • ^http(?!.*config\.privoxy\.org)icon\.ico$ не соответствует http://foo/icon.ico, потому что icon.ico должен сразу прибыть после http префикс (то, что между ними, может только соответствовать только пустой строке).
  • ^http.*(?!config\.privoxy\.org).*icon\.ico$ соответствия http://config.privoxy.org/icon.ico, потому что (?!config\.privoxy\.org) соответствия в : (а также в первом /, в o в config, и т.д.).

Я думаю, что Вы, после на самом деле

^https?://(?!config\.privoxy\.org/).*/favicon\.ico$
2
27.01.2020, 20:42
  • 1
    ! Последний бит кода является решением. Я также благодарен, что Вы дали объяснения возможностей, которые не работают, как предназначено. (В то время как я действительно использую Privoxy, я должен использовать что-то еще для https сайтов. Для просмотра с Firefox мне нравится дополнение SimpleBlock, но направления на поле могли быть менее загадочными.) –   22.02.2012, 05:15
  • 2
    Это - абсолютная ерунда. Попробуйте это длится, просачиваются Privoxy и вставляют одну из ссылок, упомянутых в первом сообщении в Вашем браузере.Угадайте что... можно получить каждого из них. Фильтр ничего абсолютно не делает. –   31.07.2012, 04:38
sed -n '/config\.privoxy\.org/d; /^http.*icon\.ico$/p'    

Это не единственный regex, но это, конечно, просто.

1
27.01.2020, 20:42

Теги

Похожие вопросы