Question

J'utilise Nginx pour segmenter le trafic mobile entre un WAP / site HTML mobile. On dirait que la meilleure façon en cochant la HTTP Accept faire va être de vérifier la préférence de l'UA pour le contenu en-tête.

Une préférence pour le WAP est indiquée par l'apparition d'une « mimetype wap » dans l'en-tête avant un « html » ou mimetype générique.

Ainsi, un Sony Ericsson W300i a une préférence pour le 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

Et un Blackberry Bold a une préférence pour 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

Depuis que je suis dans la terre Nginx, il semble que le meilleur outil que j'ai des expressions régulières est de Nginx (PCRE).

En ce moment je suis en train d'utiliser un lookahead négatif Affirmer « L'en-tête Accept contient WAP, mais pas par HTML précédée »:

(?!html.*)wap

Mais ce n'est pas correct. Y at-il une autre façon que je peux penser à ce problème? Ou ma logique correspondant?

Jusqu'à présent, j'ai trouvé ces ressources utiles regex:

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

Merci!


Merci pour la réponse, voici les essais connexes:

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)
Était-ce utile?

La solution

La façon la plus simple de le faire est avec un regard en arrière au lieu d'un test avant. Puisque non pris en charge, vous pouvez essayer d'imiter un regard en arrière avec un préanalyse:

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

Pas agréable à lire, mais il devrait fonctionner.

Rubular

Autres conseils

Pour behind aspect négatif, et un "micron" plus de performance, peut-être regarder derrière négatif avec correspondance non gourmand:

(?<!html.*?)wap
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top