PHP regular expression for working with browser agent strings

I need help again with some regular expressions I'm trying to do (still in hard training).

Again I try to learn by analyzing user agents. Trying to make Firefox now ...

Consider these UAs:

- 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 

I am trying to make a regex that will extract a version of Firefox from UA.

Here are the rules I want:

  • The version is always after the line "firefox" ("Firefox" can be a character in any case).
  • The version line can begin either immediately after the "/", or with the help of "(or even without anything).
  • The version line ends with a space or the end of the line, or with a closing bracket or semicolon.
  • In some rare cases, a version is not provided (see latest UA). The regular expression should match, but returns an empty string as version (if possible).

I think so. If someone can help, it will be great!

+4
source share
3 answers

Something like this should work:

 /Firefox[ \(\/]*([a-z0-9\.\-]+)/i 
+5
source

The following will correspond to all your set:

 #^Mozilla/.*\bFirefox\b# 

It means:

"Match any line starting with" Mozilla / "followed by any characters and then" Firefox "as a single word.

In this context, the word \ b interrupts forced matching at the boundary between the word and a character other than the word. Dunno, if necessary, but this will prevent a match in Firefox from appearing in another word, for example, “MyFirefox” or “Firefoxy”.

** I like to use hashes instead of slashes around my regular expressions, as I often have to match slashes, and this makes me less confusing. *

0
source

Depending on what you are trying to achieve, it may be wiser to match Gecko than in Firefox. This, however, means that it will correspond to browsers other than Firefox that are based on Mozilla Gecko (but this is probably the desired behavior).

 #Mozilla/.*\bGecko/\d+# 
0
source

Source: https://habr.com/ru/post/1314503/


All Articles