Regular Expressions 101

Community Patterns

Parsing browser User Agents

25

Regular Expression
PCRE (PHP <7.3)

/
(?(DEFINE) (?P<ver>\d+(?:\.\d+)*(?![.\d])) (?P<agent>Mozilla\/(?&ver)) (?P<os>(?&os_windows)|(?&os_linux)|(?&os_macintosh)|(?&os_ios)) (?P<os_windows>Windows[ ]\w+[ ](?&ver)) (?P<os_linux>Linux(?:[ ](?:i686|x86_64))?) (?P<os_macintosh>Macintosh) (?P<os_ios>(?:CPU[ ])?iPhone[ ]OS|CPU[ ]OS.*?like[ ]Mac[ ]OS[ ]X) (?P<device>(?&device_ios)|(?&device_firefox)|(?&device_android)) (?P<device_ios>iPhone|iPad) (?P<device_firefox>Mobile) (?P<device_android>Android(?:[ ](?&ver))?) (?P<browser> (?: (?&browser_ie) | (?&browser_safari) | (?&browser_chrome) | (?&browser_chromium) | (?&browser_firefox) | (?&browser_version) # | (?&browser_nexus) | (?&browser_mobile) | (?&browser_gsa) | (?&browser_quicklook) | (?&browser_opera) ) [ \/] (?: [A-Z\d]+\b(?!\.) | (?&ver) ) ) (?P<browser_safari>(?:Mobile[ ])?Safari) (?P<browser_chrome>Chrome) (?P<browser_chromium>\b\w+\b[ ]Chromium) (?P<browser_firefox>Firefox) (?P<browser_ie>MSIE) (?P<browser_version>Version) (?P<browser_nexus>Nexus[ ]\d+[ ]Build) (?P<browser_mobile>Mobile) (?P<browser_gsa>GSA) (?P<browser_quicklook>QuickLook) (?P<browser_opera>OPR) ) ^ (?:(?=.*?(?P<Agent>(?&agent)))) (?:(?=.*?(?P<OS>(?&os)))) (?:(?=.*?(?P<Device>(?&device))))? (?:(?=.*?(?P<Browser>(?&browser)(?:[ ](?&browser))*)))?
/
gmx

Description

From a (fairly large) list of User Agent strings, extract the OS, Browser, and Device Type.

Submitted by OnlineCop - 9 years ago (Last modified 8 months ago)