Регулярное выражение для соответствия «WAP» не предшествует «HTML»
-
27-09-2019 - |
Вопрос
Я использую Nginx для сегмента мобильного трафика между мобильным сайтом WAP / HTML. Похоже, лучший способ сделать это, будет проверять предпочтение UA для контента, проверив заголовок HTTP-приема.
Предпочтение WAP указывается появлением «WAP» Mimetype в заголовке перед «HTML» или WildCard Mimetype.
Итак, Sony Ericsson W300i имеет предпочтение WAP:
multipart/mixed, application/vnd.wap.multpart.mixed,applicatnoin/vnd.wap.xhtml_xml,application/xhtml+xml,text/ved.wap.wl,*/*,text/x-hdml,image/mng,/\image/x-mng,ivdeo/mng,video/x-mng,ima/gebmp,text/html
И BlackBerry Bold имеет предпочтение HTML:
text/html,application/xhtml+xml,application/vnd.wap.xhtml+xml,application/vnd.wp.wmlc;q=0.9,application/vnd.awp.wmlscriptc;q=0.7,text/vnd.wap.wml;q=07,/vnd/.sun.j2me.app-descriptor,*/*;q=0.5
Поскольку я в земле Nginx, кажется, что лучшее инструмент, у меня есть регулярные выражения Nginx (PCRE).
Прямо сейчас я пытаюсь использовать негативный поиск, чтобы утвердить «Заголовок приема содержит WAP, но не предшествующую HTML»:
(?!html.*)wap
Но это не правильно. Есть ли по-другому, я могу подумать об этой проблеме? Или моя подходящая логика?
До сих пор я нашел эти ресурсы Regex Reales:
http://www.regular-expressions.info/completelines.html.http://www.zytrax.com/tech/web/regex.htm.http://wiki.nginx.org/nginxhttprewritemodule.
Спасибо!
Спасибо за ответ, вот связанные тесты:
import re
prefers_wap_re = re.compile(r'^(?!(?:(?!wap).)*html).*?wap', re.I)
tests = [
('', False),
('wap', True),
('wap html', True),
('html wap', False),
]
for test, expected in tests:
result = prefers_wap_re.search(test)
assert bool(result) is expected, \
'Tested "%s", expected %s, got %s.' % (test, expected, result)
Решение
Самый простой способ сделать это с ошибкой, а не полей. Поскольку это не поддерживается, вы можете попытаться подражать всеобушинству с поиском:
^(?!(?:(?!wap).)*html).*?wap
Не приятно читать, но он должен работать.
Другие советы
Для негативного взгляда позади, и «микрон» больше производительности, возможно, негативные взгляды с не жадным сопоставлением:
(?<!html.*?)wap