首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式以匹配"wap“而不是"html”。

问正则表达式以匹配"wap“而不是"html”。
EN

Stack Overflow用户
提问于 2010-10-01 23:13:33
回答 2查看 1.3K关注 0票数 0

我使用NGINX在移动WAP/HTML站点之间分割移动通信量。看起来最好的方法是通过检查Header来检查UA对内容的偏好。

WAP的首选项是在“html”或通配符mimetype之前的标题中显示“wap”mimetype的外观。

因此,索尼爱立信( Sony )的w300i偏爱WAP:

代码语言:javascript
复制
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

黑莓Bold更喜欢HTML:

代码语言:javascript
复制
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)。

现在,我正在尝试使用负面的展望来断言“accept头包含WAP,但不包含HTML前面的WAP”:

代码语言:javascript
复制
(?!html.*)wap

但这不对。有什么不同的方法我可以考虑这个问题吗?还是我的匹配逻辑?

到目前为止,我发现这些regex资源非常有用:

http://www.regular-expressions.info/completelines.html http://www.zytrax.com/tech/web/regex.htm http://wiki.nginx.org/NginxHttpRewriteModule

谢谢!

谢谢你的回答,以下是相关的测试:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-01 23:16:44

实现这一点的最简单的方法是使用查找,而不是向前看。由于不支持这一点,所以您可以尝试模拟具有前瞻性的查找:

代码语言:javascript
复制
^(?!(?:(?!wap).)*html).*?wap

读起来不太愉快,但应该有用。

[医]风疹

票数 2
EN

Stack Overflow用户

发布于 2010-10-01 23:36:52

对于负面的看后,和“微米”更多的性能,也许负看后面与非贪婪的匹配:

代码语言:javascript
复制
(?<!html.*?)wap
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3843596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档