Регулярное выражение PHP для работы со строками агента браузера - PullRequest
4 голосов
/ 02 июля 2010

Мне снова нужна помощь с некоторыми регулярными выражениями, которые я пытаюсь сделать (все еще в процессе интенсивного обучения).

Опять я пытаюсь учиться, анализируя пользовательские агенты.Попытка сделать Firefox сейчас ...

Примите во внимание следующие UA:

 - Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.15) Gecko/2009101601 Firefox 2.1 (.NET CLR 3.5.30729)
 - Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.20) Gecko/20081217 Firefox(2.0.0.20)
 - Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.1b3;MEGAUPLOAD 1.0 (.NET CLR 3.5.30729)
 - Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.3a3pre) Gecko/20100306 Firefox3.6 (.NET CLR 3.5.30729)
 - Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.19) Gecko/20081202 Firefox (Debian-2.0.0.19-0etch1)
 - Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 (.NET CLR 3.5.30729)
 - Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.13) Gecko/20080313 Firefox

Я пытаюсь создать регулярное выражение, которое извлечет версию Firefox из UA.

Вот правила, которые я хочу:

  1. Версия всегда после строки «firefox» («Firefox» может быть в любом символьном случае).
  2. Строка версии может начинаться либо сразу после «/», либо пробела, либо с «(», либо даже без чего-либо.
  3. Строка версии заканчивается пробелом или концом строки или закрывающей скобкой илиточка с запятой.
  4. В некоторых редких случаях версия не указана (см. последний UA). Регулярное выражение должно соответствовать, но возвращать пустую строку в качестве версии (если возможно).

Iдумаю, вот и все. Если кто-то может помочь, это было бы здорово!

Ответы [ 3 ]

5 голосов
/ 02 июля 2010

Примерно так должно работать:

/Firefox[ \(\/]*([a-z0-9\.\-]+)/i
0 голосов
/ 02 июля 2010

В зависимости от того, чего вы пытаетесь достичь, на Gecko может оказаться разумнее, чем на Firefox. Однако это будет означать, что он будет соответствовать не браузерам Firefox, основанным на Gecko Mozilla (но это, вероятно, желаемое поведение).

#Mozilla/.*\bGecko/\d+#
0 голосов
/ 02 июля 2010

Следующие параметры будут соответствовать всем предоставленным вами:

#^Mozilla/.*\bFirefox\b#

Это означает:

"Соответствует любой строке, начинающейся с" Mozilla / ", за которой следуют любые символы, после которых идет"Firefox "как одно слово.

В этом контексте разрывы слова \ b приводят к совпадению на границе между словом и несловесным символом. Не знаю, если это необходимо, но это предотвратит совпадение в Firefox, появляющееся внутри другогоНапример, такие слова, как «MyFirefox» или «Firefoxy».

** Мне нравится использовать хеш вместо косых черт вокруг моих регулярных выражений, так как мне часто нужно сопоставлять косую черту, и это делает меня менее запутанным. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...