0

NGINXを使用して、モバイルWAP/HTMLサイト間のモバイルトラフィックをセグメント化しています。これを行うための最良の方法は、HTTPAcceptヘッダーをチェックすることによってコンテンツに対するUAの設定をチェックすることであるように見えます。

WAPの優先順位は、ヘッダーの「html」またはワイルドカードmimetypeの前に「wap」mimetypeが表示されることで示されます。

したがって、SonyEricssonw300iは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

そして、BlackberryBoldは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)のようです。

現在、負の先読みを使用して、「acceptヘッダーにはWAPが含まれていますが、HTMLが先行していません」と主張しようとしています。

(?!html.*)wap

しかし、これは正しくありません。この問題について私が考えることができる別の方法はありますか?または私のマッチングロジック?

これまでのところ、これらの正規表現リソースが役立つことがわかりました。

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)
4

2 に答える 2

2

これを行う最も簡単な方法は、先読みではなく後読みを使用することです。これはサポートされていないため、先読みで後読みをエミュレートしてみることができます。

^(?!(?:(?!wap).)*html).*?wap

読むのは楽しいことではありませんが、うまくいくはずです。

ざらざら

于 2010-10-01T23:16:44.090 に答える
0

ネガティブルックビハインド、および「ミクロン」以上のパフォーマンスの場合、欲張りでないマッチングによるネガティブルックビハインド:

(?<!html.*?)wap
于 2010-10-01T23:36:52.327 に答える