user_agent_parser 2.7.0 → 2.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/user_agent_parser/parser.rb +56 -43
- data/lib/user_agent_parser/version.rb +8 -3
- data/lib/user_agent_parser.rb +2 -2
- data/vendor/uap-core/regexes.yaml +925 -649
- metadata +11 -11
@@ -41,7 +41,7 @@ user_agent_parsers:
|
|
41
41
|
|
42
42
|
- regex: 'ArcGIS\.?(iOS|Android|NET|Qt)(?:-|\.)(\d+)\.(\d+)(?:\.(\d+)|)'
|
43
43
|
family_replacement: 'ArcGIS Runtime SDK for $1'
|
44
|
-
|
44
|
+
|
45
45
|
- regex: 'ArcGIS\.Runtime\.(Qt)\.(\d+)\.(\d+)(?:\.(\d+)|)'
|
46
46
|
family_replacement: 'ArcGIS Runtime SDK for $1'
|
47
47
|
|
@@ -52,9 +52,9 @@ user_agent_parsers:
|
|
52
52
|
family_replacement: 'AntennaPod'
|
53
53
|
- regex: '(TopPodcasts)Pro/(\d+) CFNetwork'
|
54
54
|
- regex: '(MusicDownloader)Lite/(\d+)\.(\d+)\.(\d+) CFNetwork'
|
55
|
-
- regex: '^(
|
56
|
-
- regex: '^(
|
57
|
-
- regex: '^(
|
55
|
+
- regex: '^(.{0,200})-iPad\/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|) CFNetwork'
|
56
|
+
- regex: '^(.{0,200})-iPhone/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|) CFNetwork'
|
57
|
+
- regex: '^(.{0,200})/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|) CFNetwork'
|
58
58
|
|
59
59
|
# Podcast catchers
|
60
60
|
- regex: '^(Luminary)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
|
@@ -78,6 +78,9 @@ user_agent_parsers:
|
|
78
78
|
# 'Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) PingdomTMS/0.8.5 Safari/534.34'
|
79
79
|
- regex: '(PingdomTMS)/(\d+)\.(\d+)\.(\d+)'
|
80
80
|
family_replacement: 'PingdomBot'
|
81
|
+
# 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/61.0.3163.100 Chrome/61.0.3163.100 Safari/537.36 PingdomPageSpeed/1.0 (pingbot/2.0; +http://www.pingdom.com/)'
|
82
|
+
- regex: '(PingdomPageSpeed)/(\d+)\.(\d+)'
|
83
|
+
family_replacement: 'PingdomBot'
|
81
84
|
|
82
85
|
# PTST / WebPageTest.org crawlers
|
83
86
|
- regex: ' (PTST)/(\d+)(?:\.(\d+)|)$'
|
@@ -95,7 +98,7 @@ user_agent_parsers:
|
|
95
98
|
family_replacement: 'Tableau'
|
96
99
|
|
97
100
|
# Adobe CreativeCloud
|
98
|
-
- regex: 'AppleWebKit/\d
|
101
|
+
- regex: 'AppleWebKit/\d{1,10}\.\d{1,10}.{0,200} Safari.{0,200} (CreativeCloud)/(\d+)\.(\d+).(\d+)'
|
99
102
|
family_replacement: 'Adobe CreativeCloud'
|
100
103
|
|
101
104
|
# Salesforce
|
@@ -110,7 +113,7 @@ user_agent_parsers:
|
|
110
113
|
family_replacement: 'FacebookBot'
|
111
114
|
|
112
115
|
# Google Plus
|
113
|
-
- regex: 'Google
|
116
|
+
- regex: 'Google.{0,50}/\+/web/snippet'
|
114
117
|
family_replacement: 'GooglePlusBot'
|
115
118
|
|
116
119
|
# Gmail
|
@@ -128,24 +131,24 @@ user_agent_parsers:
|
|
128
131
|
# Bots Pattern 'name/0.0.0'
|
129
132
|
- regex: '/((?:Ant-|)Nutch|[A-z]+[Bb]ot|[A-z]+[Ss]pider|Axtaris|fetchurl|Isara|ShopSalad|Tailsweep)[ \-](\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
|
130
133
|
# Bots Pattern 'name/0.0.0'
|
131
|
-
- regex: '\b(008|Altresium|Argus|BaiduMobaider|BoardReader|DNSGroup|DataparkSearch|EDI|Goodzer|Grub|INGRID|Infohelfer|LinkedInBot|LOOQ|Nutch|OgScrper|PathDefender|Peew|PostPost|Steeler|Twitterbot|VSE|WebCrunch|WebZIP|Y!J-BR[A-Z]|YahooSeeker|envolk|sproose|wminer)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
|
134
|
+
- regex: '\b(008|Altresium|Argus|BaiduMobaider|BoardReader|DNSGroup|DataparkSearch|EDI|Goodzer|Grub|INGRID|Infohelfer|LinkedInBot|LOOQ|Nutch|OgScrper|Pandora|PathDefender|Peew|PostPost|Steeler|Twitterbot|VSE|WebCrunch|WebZIP|Y!J-BR[A-Z]|YahooSeeker|envolk|sproose|wminer)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
|
132
135
|
|
133
136
|
# MSIECrawler
|
134
|
-
- regex: '(MSIE) (\d+)\.(\d+)([a-z]\d|[a-z]|)
|
137
|
+
- regex: '(MSIE) (\d+)\.(\d+)([a-z]\d|[a-z]|);.{0,200} MSIECrawler'
|
135
138
|
family_replacement: 'MSIECrawler'
|
136
139
|
|
137
140
|
# DAVdroid
|
138
141
|
- regex: '(DAVdroid)/(\d+)\.(\d+)(?:\.(\d+)|)'
|
139
142
|
|
140
143
|
# Downloader ...
|
141
|
-
- regex: '(Google-HTTP-Java-Client|Apache-HttpClient|Go-http-client|scalaj-http|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp|aihttp|reqwest|axios|unirest-(?:java|python|ruby|nodejs|php|net))(?:[ /](\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)'
|
144
|
+
- regex: '(Google-HTTP-Java-Client|Apache-HttpClient|PostmanRuntime|Go-http-client|scalaj-http|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp|aihttp|reqwest|axios|unirest-(?:java|python|ruby|nodejs|php|net))(?:[ /](\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)'
|
142
145
|
|
143
146
|
# Pinterestbot
|
144
147
|
- regex: '(Pinterest(?:bot|))/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)[;\s(]+\+https://www.pinterest.com/bot.html'
|
145
148
|
family_replacement: 'Pinterestbot'
|
146
149
|
|
147
150
|
# Bots
|
148
|
-
- regex: '(CSimpleSpider|Cityreview Robot|CrawlDaddy|CrawlFire|Finderbots|Index crawler|Job Roboter|KiwiStatus Spider|Lijit Crawler|QuerySeekerSpider|ScollSpider|Trends Crawler|USyd-NLP-Spider|SiteCat Webbot|BotName\/\$BotVersion|123metaspider-Bot|1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]{1,30}-Agent|AdsBot-Google(?:-[a-z]{1,30}|)|altavista|AppEngine-Google|archive.{0,30}\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]{1,30})(?:-[A-Za-z]{1,30}|)|bingbot|BingPreview|blitzbot|BlogBridge|Bloglovin|BoardReader Blog Indexer|BoardReader Favicon Fetcher|boitho.com-dc|BotSeer|BUbiNG|\b\w{0,30}favicon\w{0,30}\b|\bYeti(?:-[a-z]{1,30}|)|Catchpoint(?: bot|)|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher|)|Feed Seeker Bot|Feedbin|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]{1,30}-|)Googlebot(?:-[a-zA-Z]{1,30}|)|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile|)|IconSurf|IlTrovatore(?:-Setaccio|)|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]{1,30}Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .{0,30} Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media {0,2}|)|msrbot|Mtps Feed Aggregation System|netresearch|Netvibes|NewsGator[^/]{0,30}|^NING|Nutch[^/]{0,30}|Nymesis|ObjectsSearch|OgScrper|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Qwantify|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|SemrushBot|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|Stringer|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|Tiny Tiny RSS|Twitterbot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]{1,30}|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s|) Link Sleuth|Xerka [A-z]{1,30}Bot|yacy(?:bot|)|YahooSeeker|Yahoo! Slurp|Yandex\w{1,30}|YodaoBot(?:-[A-z]{1,30}|)|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg|ArcGIS Hub Indexer)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+)|)|)|)'
|
151
|
+
- regex: '(CSimpleSpider|Cityreview Robot|CrawlDaddy|CrawlFire|Finderbots|Index crawler|Job Roboter|KiwiStatus Spider|Lijit Crawler|QuerySeekerSpider|ScollSpider|Trends Crawler|USyd-NLP-Spider|SiteCat Webbot|BotName\/\$BotVersion|123metaspider-Bot|1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]{1,30}-Agent|AdsBot-Google(?:-[a-z]{1,30}|)|altavista|AppEngine-Google|archive.{0,30}\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]{1,30})(?:-[A-Za-z]{1,30}|)|bingbot|BingPreview|blitzbot|BlogBridge|Bloglovin|BoardReader Blog Indexer|BoardReader Favicon Fetcher|boitho.com-dc|BotSeer|BUbiNG|\b\w{0,30}favicon\w{0,30}\b|\bYeti(?:-[a-z]{1,30}|)|Catchpoint(?: bot|)|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher|)|Feed Seeker Bot|Feedbin|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]{1,30}-|)Googlebot(?:-[a-zA-Z]{1,30}|)|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile|)|IconSurf|IlTrovatore(?:-Setaccio|)|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]{1,30}Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .{0,30} Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media {0,2}|)|msrbot|Mtps Feed Aggregation System|netresearch|Netvibes|NewsGator[^/]{0,30}|^NING|Nutch[^/]{0,30}|Nymesis|ObjectsSearch|OgScrper|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PHPCrawl|PlantyNet_WebRobot|Pompos|Qwantify|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|SemrushBot|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|Stringer|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|Tiny Tiny RSS|Twitterbot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]{1,30}|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s|) Link Sleuth|Xerka [A-z]{1,30}Bot|yacy(?:bot|)|YahooSeeker|Yahoo! Slurp|Yandex\w{1,30}|YodaoBot(?:-[A-z]{1,30}|)|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg|ArcGIS Hub Indexer)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+)|)|)|)'
|
149
152
|
|
150
153
|
# AWS S3 Clients
|
151
154
|
# must come before "Bots General matcher" to catch "boto"/"boto3" before "bot"
|
@@ -166,21 +169,22 @@ user_agent_parsers:
|
|
166
169
|
# Facebook
|
167
170
|
# Must come before "Bots General matcher" to catch OrangeBotswana
|
168
171
|
# Facebook Messenger must go before Facebook
|
169
|
-
- regex: '\[(FBAN/MessengerForiOS|FB_IAB/MESSENGER);FBAV/(\d+)(?:\.(\d+)(?:\.(\d+)|)|)'
|
172
|
+
- regex: '\[(FBAN/MessengerForiOS|FB_IAB/MESSENGER);FBAV/(\d+)(?:\.(\d+)(?:\.(\d+)(?:\.(\d+)|)|)|)'
|
173
|
+
|
170
174
|
family_replacement: 'Facebook Messenger'
|
171
175
|
# Facebook
|
172
|
-
- regex: '\[FB
|
176
|
+
- regex: '\[FB.{0,300};(FBAV)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
|
173
177
|
family_replacement: 'Facebook'
|
174
178
|
# Sometimes Facebook does not specify a version (FBAV)
|
175
|
-
- regex: '\[FB
|
179
|
+
- regex: '\[FB.{0,300};'
|
176
180
|
family_replacement: 'Facebook'
|
177
181
|
|
178
182
|
# Bots General matcher 'name/0.0'
|
179
|
-
- regex: '(?:\/[A-Za-z0-9\.]
|
183
|
+
- regex: '^.{0,200}?(?:\/[A-Za-z0-9\.]{0,50}|) {0,2}([A-Za-z0-9 \-_\!\[\]:]{0,50}(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]{0,50}))[/ ](\d+)(?:\.(\d+)(?:\.(\d+)|)|)'
|
180
184
|
# Bots containing bot(but not CUBOT)
|
181
|
-
- regex: '((?:[A-Za-z][A-Za-z0-9 -]{0,50}|)[^C][^Uu][Bb]ot)\b(?:(?:[ /]| v)(\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)'
|
185
|
+
- regex: '^.{0,200}?((?:[A-Za-z][A-Za-z0-9 -]{0,50}|)[^C][^Uu][Bb]ot)\b(?:(?:[ /]| v)(\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)'
|
182
186
|
# Bots containing spider|scrape|Crawl
|
183
|
-
- regex: '((?:[A-z0-9]{1,50}|[A-z\-]{1,50} ?|)(?: the |)(?:[Ss][Pp][Ii][Dd][Ee][Rr]|[Ss]crape|[Cc][Rr][Aa][Ww][Ll])[A-z0-9]{0,50})(?:(?:[ /]| v)(\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)'
|
187
|
+
- regex: '^.{0,200}?((?:[A-z0-9]{1,50}|[A-z\-]{1,50} ?|)(?: the |)(?:[Ss][Pp][Ii][Dd][Ee][Rr]|[Ss]crape|[Cc][Rr][Aa][Ww][Ll])[A-z0-9]{0,50})(?:(?:[ /]| v)(\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)'
|
184
188
|
|
185
189
|
# HbbTV standard defines what features the browser should understand.
|
186
190
|
# but it's like targeting "HTML5 browsers", effective browser support depends on the model
|
@@ -196,32 +200,32 @@ user_agent_parsers:
|
|
196
200
|
|
197
201
|
# Social Networks (non-Facebook)
|
198
202
|
# Pinterest
|
199
|
-
- regex: '\[(Pinterest)/[^\]]
|
203
|
+
- regex: '\[(Pinterest)/[^\]]{1,50}\]'
|
200
204
|
- regex: '(Pinterest)(?: for Android(?: Tablet|)|)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
|
201
205
|
# Instagram app
|
202
|
-
- regex: 'Mozilla
|
206
|
+
- regex: 'Mozilla.{1,200}Mobile.{1,100}(Instagram).(\d+)\.(\d+)\.(\d+)'
|
203
207
|
# Flipboard app
|
204
|
-
- regex: 'Mozilla
|
208
|
+
- regex: 'Mozilla.{1,200}Mobile.{1,100}(Flipboard).(\d+)\.(\d+)\.(\d+)'
|
205
209
|
# Flipboard-briefing app
|
206
|
-
- regex: 'Mozilla
|
210
|
+
- regex: 'Mozilla.{1,200}Mobile.{1,100}(Flipboard-Briefing).(\d+)\.(\d+)\.(\d+)'
|
207
211
|
# Onefootball app
|
208
|
-
- regex: 'Mozilla
|
212
|
+
- regex: 'Mozilla.{1,200}Mobile.{1,100}(Onefootball)\/Android.(\d+)\.(\d+)\.(\d+)'
|
209
213
|
# Snapchat
|
210
214
|
- regex: '(Snapchat)\/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
211
215
|
# Twitter
|
212
216
|
- regex: '(Twitter for (?:iPhone|iPad)|TwitterAndroid)(?:\/(\d+)\.(\d+)|)'
|
213
217
|
family_replacement: 'Twitter'
|
214
218
|
|
215
|
-
#
|
216
|
-
- regex: 'Mozilla
|
219
|
+
# Phantom app
|
220
|
+
- regex: 'Mozilla.{1,200}Mobile.{1,100}(Phantom\/ios|android).(\d+)\.(\d+)\.(\d+)'
|
221
|
+
family_replacement: 'Phantom'
|
222
|
+
|
223
|
+
# aspiegel.com spider (owned by Huawei, later called PetalBot)
|
224
|
+
- regex: 'Mozilla.{1,100}Mobile.{1,100}(AspiegelBot|PetalBot)'
|
217
225
|
family_replacement: 'Spider'
|
218
|
-
brand_replacement: 'Spider'
|
219
|
-
model_replacement: 'Smartphone'
|
220
226
|
|
221
|
-
- regex: 'AspiegelBot'
|
227
|
+
- regex: 'AspiegelBot|PetalBot'
|
222
228
|
family_replacement: 'Spider'
|
223
|
-
brand_replacement: 'Spider'
|
224
|
-
model_replacement: 'Desktop'
|
225
229
|
|
226
230
|
# Basilisk
|
227
231
|
- regex: '(Firefox)/(\d+)\.(\d+) Basilisk/(\d+)'
|
@@ -238,7 +242,7 @@ user_agent_parsers:
|
|
238
242
|
family_replacement: 'Firefox Mobile'
|
239
243
|
- regex: '(Fennec)/(\d+)\.(\d+)'
|
240
244
|
family_replacement: 'Firefox Mobile'
|
241
|
-
- regex: '(?:Mobile|Tablet)
|
245
|
+
- regex: '(?:Mobile|Tablet);.{0,200}(Firefox)/(\d+)\.(\d+)'
|
242
246
|
family_replacement: 'Firefox Mobile'
|
243
247
|
- regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)\.(\d+(?:pre|))'
|
244
248
|
family_replacement: 'Firefox ($1)'
|
@@ -252,7 +256,7 @@ user_agent_parsers:
|
|
252
256
|
family_replacement: 'Firefox Beta'
|
253
257
|
- regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)([ab]\d+[a-z]*|)'
|
254
258
|
family_replacement: 'Firefox ($1)'
|
255
|
-
- regex: '(Firefox)
|
259
|
+
- regex: '(Firefox).{0,200}Tablet browser (\d+)\.(\d+)\.(\d+)'
|
256
260
|
family_replacement: 'MicroB'
|
257
261
|
- regex: '(MozillaDeveloperPreview)/(\d+)\.(\d+)([ab]\d+[a-z]*|)'
|
258
262
|
- regex: '(FxiOS)/(\d+)\.(\d+)(\.(\d+)|)(\.(\d+)|)'
|
@@ -284,24 +288,24 @@ user_agent_parsers:
|
|
284
288
|
|
285
289
|
# Opera will stop at 9.80 and hide the real version in the Version string.
|
286
290
|
# see: http://dev.opera.com/articles/view/opera-ua-string-changes/
|
287
|
-
- regex: '(Opera Tablet)
|
291
|
+
- regex: '(Opera Tablet).{0,200}Version/(\d+)\.(\d+)(?:\.(\d+)|)'
|
288
292
|
- regex: '(Opera Mini)(?:/att|)/?(\d+|)(?:\.(\d+)|)(?:\.(\d+)|)'
|
289
|
-
- regex: '(Opera)
|
293
|
+
- regex: '(Opera)/.{1,100}Opera Mobi.{1,100}Version/(\d+)\.(\d+)'
|
290
294
|
family_replacement: 'Opera Mobile'
|
291
|
-
- regex: '(Opera)/(\d+)\.(\d+)
|
295
|
+
- regex: '(Opera)/(\d+)\.(\d+).{1,100}Opera Mobi'
|
292
296
|
family_replacement: 'Opera Mobile'
|
293
|
-
- regex: 'Opera Mobi
|
297
|
+
- regex: 'Opera Mobi.{1,100}(Opera)(?:/|\s+)(\d+)\.(\d+)'
|
294
298
|
family_replacement: 'Opera Mobile'
|
295
299
|
- regex: 'Opera Mobi'
|
296
300
|
family_replacement: 'Opera Mobile'
|
297
|
-
- regex: '(Opera)/9.80
|
301
|
+
- regex: '(Opera)/9.80.{0,200}Version/(\d+)\.(\d+)(?:\.(\d+)|)'
|
298
302
|
|
299
303
|
# Opera 14 for Android uses a WebKit render engine.
|
300
|
-
- regex: '(?:Mobile Safari)
|
304
|
+
- regex: '(?:Mobile Safari).{1,300}(OPR)/(\d+)\.(\d+)\.(\d+)'
|
301
305
|
family_replacement: 'Opera Mobile'
|
302
306
|
|
303
307
|
# Opera >=15 for Desktop is similar to Chrome but includes an "OPR" Version string.
|
304
|
-
- regex: '(?:Chrome)
|
308
|
+
- regex: '(?:Chrome).{1,300}(OPR)/(\d+)\.(\d+)\.(\d+)'
|
305
309
|
family_replacement: 'Opera'
|
306
310
|
|
307
311
|
# Opera Coast
|
@@ -313,7 +317,7 @@ user_agent_parsers:
|
|
313
317
|
family_replacement: 'Opera Mini'
|
314
318
|
|
315
319
|
# Opera Neon
|
316
|
-
- regex: 'Chrome
|
320
|
+
- regex: 'Chrome/.{1,200}( MMS)/(\d+).(\d+).(\d+)'
|
317
321
|
family_replacement: 'Opera Neon'
|
318
322
|
|
319
323
|
# Palm WebOS looks a lot like Safari.
|
@@ -360,7 +364,7 @@ user_agent_parsers:
|
|
360
364
|
|
361
365
|
- regex: '(Symphony) (\d+).(\d+)'
|
362
366
|
|
363
|
-
- regex: 'PLAYSTATION 3
|
367
|
+
- regex: 'PLAYSTATION 3.{1,200}WebKit'
|
364
368
|
family_replacement: 'NetFront NX'
|
365
369
|
- regex: 'PLAYSTATION 3'
|
366
370
|
family_replacement: 'NetFront'
|
@@ -369,7 +373,7 @@ user_agent_parsers:
|
|
369
373
|
- regex: '(PlayStation Vita)'
|
370
374
|
family_replacement: 'NetFront NX'
|
371
375
|
|
372
|
-
- regex: 'AppleWebKit
|
376
|
+
- regex: 'AppleWebKit.{1,200} (NX)/(\d+)\.(\d+)\.(\d+)'
|
373
377
|
family_replacement: 'NetFront NX'
|
374
378
|
- regex: '(Nintendo 3DS)'
|
375
379
|
family_replacement: 'NetFront NX'
|
@@ -382,11 +386,15 @@ user_agent_parsers:
|
|
382
386
|
- regex: '(Puffin)/(\d+)\.(\d+)(?:\.(\d+)|)'
|
383
387
|
|
384
388
|
# Edge Mobile
|
385
|
-
- regex: 'Windows Phone
|
389
|
+
- regex: 'Windows Phone .{0,200}(Edge)/(\d+)\.(\d+)'
|
386
390
|
family_replacement: 'Edge Mobile'
|
387
|
-
- regex: '(EdgiOS|EdgA)/(\d+)\.(\d+)\.(\d+)
|
391
|
+
- regex: '(EdgiOS|EdgA)/(\d+)\.(\d+)\.(\d+)(?:\.(\d+)|)'
|
388
392
|
family_replacement: 'Edge Mobile'
|
389
393
|
|
394
|
+
# Oculus Browser, should go before Samsung Internet
|
395
|
+
- regex: '(OculusBrowser)/(\d+)\.(\d+).0.0(?:\.([0-9\-]+)|)'
|
396
|
+
family_replacement: 'Oculus Browser'
|
397
|
+
|
390
398
|
# Samsung Internet (based on Chrome, but lacking some features)
|
391
399
|
- regex: '(SamsungBrowser)/(\d+)\.(\d+)'
|
392
400
|
family_replacement: 'Samsung Internet'
|
@@ -430,7 +438,7 @@ user_agent_parsers:
|
|
430
438
|
family_replacement: 'TopBuzz'
|
431
439
|
|
432
440
|
# Google Search App on Android, eg:
|
433
|
-
- regex: 'Mozilla
|
441
|
+
- regex: 'Mozilla.{1,200}Android.{1,200}(GSA)/(\d+)\.(\d+)\.(\d+)'
|
434
442
|
family_replacement: 'Google'
|
435
443
|
|
436
444
|
# QQ Browsers
|
@@ -441,10 +449,18 @@ user_agent_parsers:
|
|
441
449
|
- regex: '(QQBrowser)(?:/(\d+)(?:\.(\d+)\.(\d+)(?:\.(\d+)|)|)|)'
|
442
450
|
family_replacement: 'QQ Browser'
|
443
451
|
|
452
|
+
# DuckDuckGo
|
453
|
+
- regex: 'Mobile.{0,200}(DuckDuckGo)/(\d+)'
|
454
|
+
family_replacement: 'DuckDuckGo Mobile'
|
455
|
+
|
456
|
+
# Tenta Browser
|
457
|
+
- regex: '(Tenta/)(\d+)\.(\d+)\.(\d+)'
|
458
|
+
family_replacement: 'Tenta Browser'
|
459
|
+
|
444
460
|
# Chrome Mobile
|
445
|
-
- regex: 'Version
|
461
|
+
- regex: 'Version/.{1,300}(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
446
462
|
family_replacement: 'Chrome Mobile WebView'
|
447
|
-
- regex: '; wv\)
|
463
|
+
- regex: '; wv\).{1,300}(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
448
464
|
family_replacement: 'Chrome Mobile WebView'
|
449
465
|
- regex: '(CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
450
466
|
family_replacement: 'Chrome Mobile'
|
@@ -452,7 +468,7 @@ user_agent_parsers:
|
|
452
468
|
family_replacement: 'Chrome Mobile iOS'
|
453
469
|
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+) Mobile(?:[ /]|$)'
|
454
470
|
family_replacement: 'Chrome Mobile'
|
455
|
-
- regex: ' Mobile
|
471
|
+
- regex: ' Mobile .{1,300}(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
456
472
|
family_replacement: 'Chrome Mobile'
|
457
473
|
|
458
474
|
# Chrome Frame must come before MSIE.
|
@@ -482,7 +498,7 @@ user_agent_parsers:
|
|
482
498
|
family_replacement: 'Yandex Browser'
|
483
499
|
|
484
500
|
# Mail.ru Amigo/Internet Browser (Chromium-based)
|
485
|
-
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)
|
501
|
+
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+).{0,100} MRCHROME'
|
486
502
|
family_replacement: 'Mail.ru Chromium Browser'
|
487
503
|
|
488
504
|
# AOL Browser (IE-based)
|
@@ -509,6 +525,13 @@ user_agent_parsers:
|
|
509
525
|
# @ref: http://www.ghost.org
|
510
526
|
- regex: '(Ghost)/(\d+)\.(\d+)\.(\d+)'
|
511
527
|
|
528
|
+
# Palo Alto GlobalProtect Linux
|
529
|
+
- regex: 'PAN (GlobalProtect)/(\d+)\.(\d+)\.(\d+) .{1,100} \(X11; Linux x86_64\)'
|
530
|
+
|
531
|
+
# Surveyon https://www.surveyon.com/
|
532
|
+
- regex: '^(surveyon)/(\d+)\.(\d+)\.(\d+)'
|
533
|
+
family_replacement: 'Surveyon'
|
534
|
+
|
512
535
|
#### END SPECIAL CASES TOP ####
|
513
536
|
|
514
537
|
#### MAIN CASES - this catches > 50% of all browsers ####
|
@@ -550,7 +573,7 @@ user_agent_parsers:
|
|
550
573
|
- regex: 'Microsoft Office (Word) 2014'
|
551
574
|
|
552
575
|
# Windows Live Mail
|
553
|
-
- regex: 'Outlook-Express\/7\.0
|
576
|
+
- regex: 'Outlook-Express\/7\.0'
|
554
577
|
family_replacement: 'Windows Live Mail'
|
555
578
|
|
556
579
|
# Apple Air Mail
|
@@ -590,7 +613,7 @@ user_agent_parsers:
|
|
590
613
|
family_replacement: 'Brave'
|
591
614
|
|
592
615
|
# Iron Browser ~since version 50
|
593
|
-
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)[\d.]
|
616
|
+
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)[\d.]{0,100} Iron[^/]'
|
594
617
|
family_replacement: 'Iron'
|
595
618
|
|
596
619
|
# Dolphin Browser
|
@@ -666,13 +689,13 @@ user_agent_parsers:
|
|
666
689
|
- regex: '^(HTC) Streaming Player \S+ / \S+ / \S+ / (\d+)\.(\d+)(?:\.(\d+)|)'
|
667
690
|
- regex: '^(Stitcher)/iOS'
|
668
691
|
- regex: '^(Stitcher)/Android'
|
669
|
-
- regex: '^(VLC)
|
692
|
+
- regex: '^(VLC) .{0,200}version (\d+)\.(\d+)\.(\d+)'
|
670
693
|
- regex: ' (VLC) for'
|
671
694
|
- regex: '(vlc)/(\d+)\.(\d+)\.(\d+)'
|
672
695
|
family_replacement: 'VLC'
|
673
|
-
- regex: '^(foobar)\S
|
674
|
-
- regex: '^(Clementine)\S
|
675
|
-
- regex: '(amarok)/(
|
696
|
+
- regex: '^(foobar)\S{1,10}/(\d+)\.(\d+|)\.?([\da-z]+|)'
|
697
|
+
- regex: '^(Clementine)\S{1,10} (\d+)\.(\d+|)\.?(\d+|)'
|
698
|
+
- regex: '(amarok)/(\d+)\.(\d+|)\.?(\d+|)'
|
676
699
|
family_replacement: 'Amarok'
|
677
700
|
- regex: '(Custom)-Feed Reader'
|
678
701
|
|
@@ -706,7 +729,7 @@ user_agent_parsers:
|
|
706
729
|
|
707
730
|
# desktop mode
|
708
731
|
# http://www.anandtech.com/show/3982/windows-phone-7-review
|
709
|
-
- regex: '(MSIE) (\d+)\.(\d+)
|
732
|
+
- regex: '(MSIE) (\d+)\.(\d+).{0,100}XBLWP7'
|
710
733
|
family_replacement: 'IE Large Screen'
|
711
734
|
|
712
735
|
# Nextcloud desktop sync client
|
@@ -723,6 +746,17 @@ user_agent_parsers:
|
|
723
746
|
- regex: '(OC)/(\d+)\.(\d+)\.(\d+)\.(\d+) \(Skype for Business\)'
|
724
747
|
family_replacement: 'Skype'
|
725
748
|
|
749
|
+
# OpenVAS Scanner
|
750
|
+
- regex: '(OpenVAS)(?:-VT)?(?:[ \/](\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)'
|
751
|
+
family_replacement: 'OpenVAS Scanner'
|
752
|
+
|
753
|
+
# AnyConnect
|
754
|
+
- regex: '(AnyConnect)\/(\d+)(?:\.(\d+)(?:\.(\d+)|)|)'
|
755
|
+
|
756
|
+
# Monitis
|
757
|
+
- regex: 'compatible; monitis'
|
758
|
+
family_replacement: 'Monitis'
|
759
|
+
|
726
760
|
#### END MAIN CASES ####
|
727
761
|
|
728
762
|
#### SPECIAL CASES ####
|
@@ -759,15 +793,15 @@ user_agent_parsers:
|
|
759
793
|
family_replacement: 'TopBuzz'
|
760
794
|
|
761
795
|
# @note: iOS / OSX Applications
|
762
|
-
- regex: '(iPod|iPhone|iPad)
|
796
|
+
- regex: '(iPod|iPhone|iPad).{1,200}GSA/(\d+)\.(\d+)\.(\d+)(?:\.(\d+)|) Mobile'
|
763
797
|
family_replacement: 'Google'
|
764
|
-
- regex: '(iPod|iPhone|iPad)
|
798
|
+
- regex: '(iPod|iPhone|iPad).{1,200}Version/(\d+)\.(\d+)(?:\.(\d+)|).{1,200}[ +]Safari'
|
765
799
|
family_replacement: 'Mobile Safari'
|
766
|
-
- regex: '(iPod|iPod touch|iPhone|iPad)
|
800
|
+
- regex: '(iPod|iPod touch|iPhone|iPad);.{0,30}CPU.{0,30}OS[ +](\d+)_(\d+)(?:_(\d+)|).{0,30} AppleNews\/\d+\.\d+(?:\.\d+|)'
|
767
801
|
family_replacement: 'Mobile Safari UI/WKWebView'
|
768
|
-
- regex: '(iPod|iPhone|iPad)
|
802
|
+
- regex: '(iPod|iPhone|iPad).{1,200}Version/(\d+)\.(\d+)(?:\.(\d+)|)'
|
769
803
|
family_replacement: 'Mobile Safari UI/WKWebView'
|
770
|
-
- regex: '(iPod|iPod touch|iPhone|iPad)
|
804
|
+
- regex: '(iPod|iPod touch|iPhone|iPad).{0,200} Safari'
|
771
805
|
family_replacement: 'Mobile Safari'
|
772
806
|
- regex: '(iPod|iPod touch|iPhone|iPad)'
|
773
807
|
family_replacement: 'Mobile Safari UI/WKWebView'
|
@@ -818,9 +852,9 @@ user_agent_parsers:
|
|
818
852
|
- regex: '(Nokia)[EN]?(\d+)'
|
819
853
|
|
820
854
|
# BlackBerry devices
|
821
|
-
- regex: '(PlayBook)
|
855
|
+
- regex: '(PlayBook).{1,200}RIM Tablet OS (\d+)\.(\d+)\.(\d+)'
|
822
856
|
family_replacement: 'BlackBerry WebKit'
|
823
|
-
- regex: '(Black[bB]erry|BB10)
|
857
|
+
- regex: '(Black[bB]erry|BB10).{1,200}Version/(\d+)\.(\d+)\.(\d+)'
|
824
858
|
family_replacement: 'BlackBerry WebKit'
|
825
859
|
- regex: '(Black[bB]erry)\s?(\d+)'
|
826
860
|
family_replacement: 'BlackBerry'
|
@@ -840,18 +874,15 @@ user_agent_parsers:
|
|
840
874
|
|
841
875
|
- regex: '(QtWeb) Internet Browser/(\d+)\.(\d+)'
|
842
876
|
|
843
|
-
#- regex: '\(iPad;.+(Version)/(\d+)\.(\d+)(?:\.(\d+)|).*Safari/'
|
844
|
-
# family_replacement: 'iPad'
|
845
|
-
|
846
877
|
# Phantomjs, should go before Safari
|
847
878
|
- regex: '(PhantomJS)/(\d+)\.(\d+)\.(\d+)'
|
848
879
|
|
849
880
|
# WebKit Nightly
|
850
|
-
- regex: '(AppleWebKit)/(\d+)(?:\.(\d+)|)\+
|
881
|
+
- regex: '(AppleWebKit)/(\d+)(?:\.(\d+)|)\+ .{0,200} Safari'
|
851
882
|
family_replacement: 'WebKit Nightly'
|
852
883
|
|
853
884
|
# Safari
|
854
|
-
- regex: '(Version)/(\d+)\.(\d+)(?:\.(\d+)|)
|
885
|
+
- regex: '(Version)/(\d+)\.(\d+)(?:\.(\d+)|).{0,100}Safari/'
|
855
886
|
family_replacement: 'Safari'
|
856
887
|
# Safari didn't provide "Version/d.d.d" prior to 3.0
|
857
888
|
- regex: '(Safari)/\d+'
|
@@ -897,9 +928,10 @@ user_agent_parsers:
|
|
897
928
|
# AFTER THE EDGE CASES ABOVE!
|
898
929
|
# AFTER IE11
|
899
930
|
# BEFORE all other IE
|
900
|
-
- regex: '(Firefox)/(\d+)\.(\d+)
|
931
|
+
- regex: '(Firefox)/(\d+)\.(\d+)(?:\.(\d+)|$)'
|
901
932
|
- regex: '(Firefox)/(\d+)\.(\d+)(pre|[ab]\d+[a-z]*|)'
|
902
933
|
|
934
|
+
|
903
935
|
- regex: '([MS]?IE) (\d+)\.(\d+)'
|
904
936
|
family_replacement: 'IE'
|
905
937
|
|
@@ -907,17 +939,58 @@ user_agent_parsers:
|
|
907
939
|
family_replacement: 'Python Requests'
|
908
940
|
|
909
941
|
# headless user-agents
|
910
|
-
- regex: '\b(Windows-Update-Agent|WindowsPowerShell|Microsoft-CryptoAPI|SophosUpdateManager|SophosAgent|Debian APT-HTTP|Ubuntu APT-HTTP|libcurl-agent|libwww-perl|urlgrabber|curl|PycURL|Wget|wget2|aria2|Axel|OpenBSD ftp|lftp|jupdate|insomnia|fetch libfetch|akka-http|got)(?:[ /](\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)'
|
942
|
+
- regex: '\b(Windows-Update-Agent|WindowsPowerShell|Microsoft-CryptoAPI|SophosUpdateManager|SophosAgent|Debian APT-HTTP|Ubuntu APT-HTTP|libcurl-agent|libwww-perl|urlgrabber|curl|PycURL|Wget|wget2|aria2|Axel|OpenBSD ftp|lftp|jupdate|insomnia|fetch libfetch|akka-http|got|CloudCockpitBackend|ReactorNetty|axios|Jersey|Vert.x-WebClient|Apache-CXF|Go-CF-client|go-resty|AHC|HTTPie)(?:[ /](\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)'
|
943
|
+
|
944
|
+
# CloudFoundry
|
945
|
+
- regex: '^(cf)\/(\d+)\.(\d+)\.(\S+)'
|
946
|
+
family_replacement: 'CloudFoundry'
|
947
|
+
|
948
|
+
# SAP Leonardo
|
949
|
+
- regex: '^(sap-leonardo-iot-sdk-nodejs) \/ (\d+)\.(\d+)\.(\d+)'
|
950
|
+
|
951
|
+
# SAP Netweaver Application Server
|
952
|
+
- regex: '^(SAP NetWeaver Application Server) \(1.0;(\d{1})(\d{2})\)'
|
953
|
+
|
954
|
+
# HttpClient
|
955
|
+
- regex: '^(\w+-HTTPClient)\/(\d+)\.(\d+)-(\S+)'
|
956
|
+
family_replacement: 'HTTPClient'
|
957
|
+
|
958
|
+
# go-cli
|
959
|
+
- regex: '^(go-cli)\s(\d+)\.(\d+).(\S+)'
|
960
|
+
|
961
|
+
# Other Clients with the pattern <Name>/[v]<Major>.<Minor>[.<Patch>]
|
962
|
+
- regex: '^(Java-EurekaClient|Java-EurekaClient-Replication|HTTPClient|lua-resty-http)\/v?(\d+)\.(\d+)\.?(\d*)'
|
963
|
+
|
964
|
+
## Clints with the pattern <Name>
|
965
|
+
- regex: '^(ping-service|sap xsuaa|Node-oauth|Site24x7|SAP CPI|JAEGER_SECURITY)'
|
911
966
|
|
912
967
|
# Asynchronous HTTP Client/Server for asyncio and Python (https://aiohttp.readthedocs.io/)
|
913
968
|
- regex: '(Python/3\.\d{1,3} aiohttp)/(\d+)\.(\d+)\.(\d+)'
|
914
969
|
family_replacement: 'Python aiohttp'
|
915
970
|
|
916
|
-
- regex: '(Java)[/ ]?\d
|
971
|
+
- regex: '(Java)[/ ]?\d{1}\.(\d+)\.(\d+)[_-]*([a-zA-Z0-9]+|)'
|
972
|
+
|
973
|
+
- regex: '(Java)[/ ]?(\d+)\.(\d+)\.(\d+)'
|
974
|
+
|
975
|
+
# minio-go (https://github.com/minio/minio-go)
|
976
|
+
- regex: '(minio-go)/v(\d+)\.(\d+)\.(\d+)'
|
977
|
+
|
978
|
+
# ureq - minimal request library in rust (https://github.com/algesten/ureq)
|
979
|
+
- regex: '^(ureq)[/ ](\d+)\.(\d+).(\d+)'
|
980
|
+
|
981
|
+
# http.rb - HTTP (The Gem! a.k.a. http.rb) - a fast Ruby HTTP client
|
982
|
+
# (https://github.com/httprb/http/blob/3aa7470288deb81f7d7b982c1e2381871049dcbb/lib/http/request.rb#L27)
|
983
|
+
- regex: '^(http\.rb)/(\d+)\.(\d+).(\d+)'
|
984
|
+
|
985
|
+
# Guzzle, PHP HTTP client (https://docs.guzzlephp.org/)
|
986
|
+
- regex: '^(GuzzleHttp)/(\d+)\.(\d+).(\d+)'
|
987
|
+
|
988
|
+
# lorien/grab - Web Scraping Framework (https://github.com/lorien/grab)
|
989
|
+
- regex: '^(grab)\b'
|
917
990
|
|
918
991
|
# Cloud Storage Clients
|
919
992
|
- regex: '^(Cyberduck)/(\d+)\.(\d+)\.(\d+)(?:\.\d+|)'
|
920
|
-
- regex: '^(S3 Browser) (\d+)
|
993
|
+
- regex: '^(S3 Browser) (\d+)[.-](\d+)[.-](\d+)(?:\s*https?://s3browser\.com|)'
|
921
994
|
- regex: '(S3Gof3r)'
|
922
995
|
# IBM COS (Cloud Object Storage) API
|
923
996
|
- regex: '\b(ibm-cos-sdk-(?:core|java|js|python))/(\d+)\.(\d+)(?:\.(\d+)|)'
|
@@ -940,6 +1013,20 @@ user_agent_parsers:
|
|
940
1013
|
- regex: '^(ViaFree|Viafree)-(?:tvOS-)?[A-Z]{2}/(\d+)\.(\d+)\.(\d+)'
|
941
1014
|
family_replacement: 'ViaFree'
|
942
1015
|
|
1016
|
+
# Transmit (https://library.panic.com/transmit/)
|
1017
|
+
- regex: '(Transmit)/(\d+)\.(\d+)\.(\d+)'
|
1018
|
+
|
1019
|
+
# Download Master (https://downloadmaster.ru/)
|
1020
|
+
- regex: '(Download Master)'
|
1021
|
+
|
1022
|
+
# HTTrack crawler
|
1023
|
+
- regex: '\b(HTTrack) (\d+)\.(\d+)(?:[\.\-](\d+)|)'
|
1024
|
+
|
1025
|
+
# SerenityOS (https://serenityos.org)
|
1026
|
+
# https://github.com/SerenityOS/serenity/blob/2e1bbcb0faeae92d7595b8e0b022a8cdcecca07e/Userland/Libraries/LibWeb/Loader/ResourceLoader.h#L27
|
1027
|
+
- regex: 'SerenityOS'
|
1028
|
+
family_replacement: 'SerenityOS Browser'
|
1029
|
+
|
943
1030
|
os_parsers:
|
944
1031
|
##########
|
945
1032
|
# HbbTV vendors
|
@@ -955,7 +1042,7 @@ os_parsers:
|
|
955
1042
|
# Opera/9.80 (Linux armv7l; HbbTV/1.1.1 (; Sony; KDL32W650A; PKG3.211EUA; 2013;); ) Presto/2.12.362 Version/12.11
|
956
1043
|
# Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Sony; KDL40HX751; PKG1.902EUA; 2012;);; en) Presto/2.10.250 Version/11.60
|
957
1044
|
# Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Sony; KDL22EX320; PKG4.017EUA; 2011;);; en) Presto/2.7.61 Version/11.00
|
958
|
-
#- regex: 'HbbTV/\d+\.\d+\.\d+ \(; (Sony)
|
1045
|
+
#- regex: 'HbbTV/\d+\.\d+\.\d+ \(; (Sony);.{0,200};.{0,200}; ([0-9]{4});\)'
|
959
1046
|
|
960
1047
|
|
961
1048
|
# LG is consistent too, but we need to add manually the year model
|
@@ -975,9 +1062,9 @@ os_parsers:
|
|
975
1062
|
os_replacement: 'Samsung'
|
976
1063
|
os_v1_replacement: '2011'
|
977
1064
|
# manage the two models of 2013
|
978
|
-
- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4})
|
1065
|
+
- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});.{0,200}FXPDEUC'
|
979
1066
|
os_v2_replacement: 'UE40F7000'
|
980
|
-
- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4})
|
1067
|
+
- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});.{0,200}MST12DEUC'
|
981
1068
|
os_v2_replacement: 'UE32F4500'
|
982
1069
|
# generic Samsung (works starting in 2012)
|
983
1070
|
#- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});'
|
@@ -985,26 +1072,26 @@ os_parsers:
|
|
985
1072
|
# Philips : not found any other way than a manual mapping
|
986
1073
|
# Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/4.1.3 PHILIPSTV/1.1.1; en) Presto/2.10.250 Version/11.60
|
987
1074
|
# Opera/9.80 (Linux mips ; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.2.1; en) Presto/2.6.33 Version/10.70
|
988
|
-
- regex: 'HbbTV/1\.1\.1 \(; (Philips)
|
1075
|
+
- regex: 'HbbTV/1\.1\.1 \(; (Philips);.{0,200}NETTV/4'
|
989
1076
|
os_v1_replacement: '2013'
|
990
|
-
- regex: 'HbbTV/1\.1\.1 \(; (Philips)
|
1077
|
+
- regex: 'HbbTV/1\.1\.1 \(; (Philips);.{0,200}NETTV/3'
|
991
1078
|
os_v1_replacement: '2012'
|
992
|
-
- regex: 'HbbTV/1\.1\.1 \(; (Philips)
|
1079
|
+
- regex: 'HbbTV/1\.1\.1 \(; (Philips);.{0,200}NETTV/2'
|
993
1080
|
os_v1_replacement: '2011'
|
994
1081
|
|
995
1082
|
# the HbbTV emulator developers use HbbTV/1.1.1 (;;;;;) firetv-firefox-plugin 1.1.20
|
996
|
-
- regex: 'HbbTV/\d+\.\d+\.\d
|
1083
|
+
- regex: 'HbbTV/\d+\.\d+\.\d+.{0,100}(firetv)-firefox-plugin (\d+).(\d+).(\d+)'
|
997
1084
|
os_replacement: 'FireHbbTV'
|
998
1085
|
|
999
1086
|
# generic HbbTV, hoping to catch manufacturer name (always after 2nd comma) and the first string that looks like a 2011-2019 year
|
1000
|
-
- regex: 'HbbTV/\d+\.\d+\.\d+ \(
|
1087
|
+
- regex: 'HbbTV/\d+\.\d+\.\d+ \(.{0,30}; ?([a-zA-Z]+) ?;.{0,30}(201[1-9]).{0,30}\)'
|
1001
1088
|
|
1002
|
-
# aspiegel.com spider (owned by Huawei)
|
1003
|
-
- regex: 'AspiegelBot'
|
1089
|
+
# aspiegel.com spider (owned by Huawei, later renamed PetalBot)
|
1090
|
+
- regex: 'AspiegelBot|PetalBot'
|
1004
1091
|
os_replacement: 'Other'
|
1005
1092
|
|
1006
1093
|
##########
|
1007
|
-
# @note: Windows Phone needs to come before Windows NT 6.1
|
1094
|
+
# @note: Windows Phone needs to come before Windows NT 6.1 {0,2}and* before Android to catch cases such as:
|
1008
1095
|
# Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920)...
|
1009
1096
|
# Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920; ANZ821)...
|
1010
1097
|
# Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920; Orange)...
|
@@ -1013,12 +1100,12 @@ os_parsers:
|
|
1013
1100
|
|
1014
1101
|
- regex: '(Windows Phone) (?:OS[ /])?(\d+)\.(\d+)'
|
1015
1102
|
|
1016
|
-
# Again a MS-special one: iPhone
|
1017
|
-
- regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+)|)
|
1103
|
+
# Again a MS-special one: iPhone.{0,200}Outlook-iOS-Android/x.x is erroneously detected as Android
|
1104
|
+
- regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+)|).{0,100}Outlook-iOS-Android'
|
1018
1105
|
os_replacement: 'iOS'
|
1019
1106
|
|
1020
1107
|
# Special case for old ArcGIS Mobile products
|
1021
|
-
- regex: 'ArcGIS\.?(iOS|Android)-\d+\.\d+(?:\.\d+|)(?:[^\/]
|
1108
|
+
- regex: 'ArcGIS\.?(iOS|Android)-\d+\.\d+(?:\.\d+|)(?:[^\/]{1,50}|)\/(\d+)(?:\.(\d+)(?:\.(\d+)|)|)'
|
1022
1109
|
|
1023
1110
|
# Special case for new ArcGIS Mobile products
|
1024
1111
|
- regex: 'ArcGISRuntime-(?:Android|iOS)\/\d+\.\d+(?:\.\d+|) \((Android|iOS) (\d+)(?:\.(\d+)(?:\.(\d+)|)|);'
|
@@ -1050,22 +1137,29 @@ os_parsers:
|
|
1050
1137
|
|
1051
1138
|
# Android 9; Android 10;
|
1052
1139
|
- regex: '(Android) (\d+);'
|
1140
|
+
- regex: '(Android): (\d+)(?:\.(\d+)(?:\.(\d+)|)|);'
|
1053
1141
|
|
1054
1142
|
# UCWEB
|
1055
|
-
- regex: '^UCWEB
|
1143
|
+
- regex: '^UCWEB.{0,200}; (Adr) (\d+)\.(\d+)(?:[.\-]([a-z0-9]{1,100})|);'
|
1056
1144
|
os_replacement: 'Android'
|
1057
|
-
- regex: '^UCWEB
|
1145
|
+
- regex: '^UCWEB.{0,200}; (iPad|iPh|iPd) OS (\d+)_(\d+)(?:_(\d+)|);'
|
1058
1146
|
os_replacement: 'iOS'
|
1059
|
-
- regex: '^UCWEB
|
1147
|
+
- regex: '^UCWEB.{0,200}; (wds) (\d+)\.(\d+)(?:\.(\d+)|);'
|
1060
1148
|
os_replacement: 'Windows Phone'
|
1061
1149
|
# JUC
|
1062
|
-
- regex: '^(JUC)
|
1150
|
+
- regex: '^(JUC).{0,200}; ?U; ?(?:Android|)(\d+)\.(\d+)(?:[\.\-]([a-z0-9]{1,100})|)'
|
1063
1151
|
os_replacement: 'Android'
|
1064
1152
|
|
1065
1153
|
# Salesforce
|
1066
1154
|
- regex: '(android)\s(?:mobile\/)(\d+)(?:\.(\d+)(?:\.(\d+)|)|)'
|
1067
1155
|
os_replacement: 'Android'
|
1068
1156
|
|
1157
|
+
##########
|
1158
|
+
# Meta Quest
|
1159
|
+
##########
|
1160
|
+
- regex: 'Quest'
|
1161
|
+
os_replacement: 'Android'
|
1162
|
+
|
1069
1163
|
##########
|
1070
1164
|
# Kindle Android
|
1071
1165
|
##########
|
@@ -1077,7 +1171,7 @@ os_parsers:
|
|
1077
1171
|
# properly identify as Chrome OS
|
1078
1172
|
#
|
1079
1173
|
# ex: Mozilla/5.0 (X11; Windows aarch64 10718.88.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.118 Safari/537.36 CitrixChromeApp
|
1080
|
-
- regex: '(x86_64|aarch64)\ (\d+)\.(\d+)\.(\d+)
|
1174
|
+
- regex: '(x86_64|aarch64)\ (\d+)\.(\d+)\.(\d+).{0,100}Chrome.{0,100}(?:CitrixChromeApp)$'
|
1081
1175
|
os_replacement: 'Chrome OS'
|
1082
1176
|
|
1083
1177
|
##########
|
@@ -1169,7 +1263,7 @@ os_parsers:
|
|
1169
1263
|
os_v1_replacement: '95'
|
1170
1264
|
|
1171
1265
|
# Box apps (Drive, Sync, Notes) on Windows https://www.box.com/resources/downloads
|
1172
|
-
- regex: '^Box
|
1266
|
+
- regex: '^Box.{0,200}Windows/([\d.]+);'
|
1173
1267
|
os_replacement: 'Windows'
|
1174
1268
|
os_v1_replacement: '$1'
|
1175
1269
|
|
@@ -1186,33 +1280,33 @@ os_parsers:
|
|
1186
1280
|
##########
|
1187
1281
|
- regex: '((?:Mac[ +]?|; )OS[ +]X)[\s+/](?:(\d+)[_.](\d+)(?:[_.](\d+)|)|Mach-O)'
|
1188
1282
|
os_replacement: 'Mac OS X'
|
1189
|
-
- regex: '
|
1283
|
+
- regex: 'Mac OS X\s.{1,50}\s(\d+).(\d+).(\d+)'
|
1190
1284
|
os_replacement: 'Mac OS X'
|
1191
1285
|
os_v1_replacement: '$1'
|
1192
1286
|
os_v2_replacement: '$2'
|
1193
1287
|
os_v3_replacement: '$3'
|
1194
1288
|
# Leopard
|
1195
|
-
- regex: ' (Dar)(win)/(9).(\d+)
|
1289
|
+
- regex: ' (Dar)(win)/(9).(\d+).{0,100}\((?:i386|x86_64|Power Macintosh)\)'
|
1196
1290
|
os_replacement: 'Mac OS X'
|
1197
1291
|
os_v1_replacement: '10'
|
1198
1292
|
os_v2_replacement: '5'
|
1199
1293
|
# Snow Leopard
|
1200
|
-
- regex: ' (Dar)(win)/(10).(\d+)
|
1294
|
+
- regex: ' (Dar)(win)/(10).(\d+).{0,100}\((?:i386|x86_64)\)'
|
1201
1295
|
os_replacement: 'Mac OS X'
|
1202
1296
|
os_v1_replacement: '10'
|
1203
1297
|
os_v2_replacement: '6'
|
1204
1298
|
# Lion
|
1205
|
-
- regex: ' (Dar)(win)/(11).(\d+)
|
1299
|
+
- regex: ' (Dar)(win)/(11).(\d+).{0,100}\((?:i386|x86_64)\)'
|
1206
1300
|
os_replacement: 'Mac OS X'
|
1207
1301
|
os_v1_replacement: '10'
|
1208
1302
|
os_v2_replacement: '7'
|
1209
1303
|
# Mountain Lion
|
1210
|
-
- regex: ' (Dar)(win)/(12).(\d+)
|
1304
|
+
- regex: ' (Dar)(win)/(12).(\d+).{0,100}\((?:i386|x86_64)\)'
|
1211
1305
|
os_replacement: 'Mac OS X'
|
1212
1306
|
os_v1_replacement: '10'
|
1213
1307
|
os_v2_replacement: '8'
|
1214
1308
|
# Mavericks
|
1215
|
-
- regex: ' (Dar)(win)/(13).(\d+)
|
1309
|
+
- regex: ' (Dar)(win)/(13).(\d+).{0,100}\((?:i386|x86_64)\)'
|
1216
1310
|
os_replacement: 'Mac OS X'
|
1217
1311
|
os_v1_replacement: '10'
|
1218
1312
|
os_v2_replacement: '9'
|
@@ -1229,7 +1323,7 @@ os_parsers:
|
|
1229
1323
|
- regex: '(?:PPC|Intel) (Mac OS X)'
|
1230
1324
|
|
1231
1325
|
# Box Drive and Box Sync on Mac OS X use OSX version numbers, not Darwin
|
1232
|
-
- regex: '^Box
|
1326
|
+
- regex: '^Box.{0,200};(Darwin)/(10)\.(1\d)(?:\.(\d+)|)'
|
1233
1327
|
os_replacement: 'Mac OS X'
|
1234
1328
|
|
1235
1329
|
##########
|
@@ -1240,7 +1334,7 @@ os_parsers:
|
|
1240
1334
|
- regex: '(Apple\s?TV)(?:/(\d+)\.(\d+)|)'
|
1241
1335
|
os_replacement: 'ATV OS X'
|
1242
1336
|
|
1243
|
-
- regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+)|)'
|
1337
|
+
- regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+)|)'
|
1244
1338
|
os_replacement: 'iOS'
|
1245
1339
|
|
1246
1340
|
# remaining cases are mostly only opera uas, so catch opera as to not catch iphone spoofs
|
@@ -1248,15 +1342,15 @@ os_parsers:
|
|
1248
1342
|
os_replacement: 'iOS'
|
1249
1343
|
|
1250
1344
|
# few more stragglers
|
1251
|
-
- regex: '(iPhone|iPad|iPod)
|
1345
|
+
- regex: '(iPhone|iPad|iPod).{0,100}Mac OS X.{0,100}Version/(\d+)\.(\d+)'
|
1252
1346
|
os_replacement: 'iOS'
|
1253
1347
|
|
1254
1348
|
# CFNetwork/Darwin - The specific CFNetwork or Darwin version determines
|
1255
1349
|
# whether the os maps to Mac OS, or iOS, or just Darwin.
|
1256
1350
|
# See: http://user-agents.me/cfnetwork-version-list
|
1257
|
-
- regex: '(CFNetwork)/(5)48\.0\.3
|
1351
|
+
- regex: '(CFNetwork)/(5)48\.0\.3.{0,100} Darwin/11\.0\.0'
|
1258
1352
|
os_replacement: 'iOS'
|
1259
|
-
- regex: '(CFNetwork)/(5)48\.(0)\.4
|
1353
|
+
- regex: '(CFNetwork)/(5)48\.(0)\.4.{0,100} Darwin/(1)1\.0\.0'
|
1260
1354
|
os_replacement: 'iOS'
|
1261
1355
|
- regex: '(CFNetwork)/(5)48\.(1)\.4'
|
1262
1356
|
os_replacement: 'iOS'
|
@@ -1291,17 +1385,17 @@ os_parsers:
|
|
1291
1385
|
os_replacement: 'Mac OS X'
|
1292
1386
|
os_v1_replacement: '10'
|
1293
1387
|
os_v2_replacement: '11'
|
1294
|
-
- regex: 'CFNetwork/7
|
1388
|
+
- regex: 'CFNetwork/7.{0,100} Darwin/15\.4\.\d+'
|
1295
1389
|
os_replacement: 'iOS'
|
1296
1390
|
os_v1_replacement: '9'
|
1297
1391
|
os_v2_replacement: '3'
|
1298
1392
|
os_v3_replacement: '1'
|
1299
|
-
- regex: 'CFNetwork/7
|
1393
|
+
- regex: 'CFNetwork/7.{0,100} Darwin/15\.5\.\d+'
|
1300
1394
|
os_replacement: 'iOS'
|
1301
1395
|
os_v1_replacement: '9'
|
1302
1396
|
os_v2_replacement: '3'
|
1303
1397
|
os_v3_replacement: '2'
|
1304
|
-
- regex: 'CFNetwork/7
|
1398
|
+
- regex: 'CFNetwork/7.{0,100} Darwin/15\.6\.\d+'
|
1305
1399
|
os_replacement: 'iOS'
|
1306
1400
|
os_v1_replacement: '9'
|
1307
1401
|
os_v2_replacement: '3'
|
@@ -1322,15 +1416,15 @@ os_parsers:
|
|
1322
1416
|
# CFNetwork macOS Apps (must be before CFNetwork iOS Apps
|
1323
1417
|
# @ref: https://en.wikipedia.org/wiki/Darwin_(operating_system)#Release_history
|
1324
1418
|
##########
|
1325
|
-
- regex: 'CFNetwork
|
1419
|
+
- regex: 'CFNetwork/.{0,100} Darwin/17\.\d+.{0,100}\(x86_64\)'
|
1326
1420
|
os_replacement: 'Mac OS X'
|
1327
1421
|
os_v1_replacement: '10'
|
1328
1422
|
os_v2_replacement: '13'
|
1329
|
-
- regex: 'CFNetwork
|
1423
|
+
- regex: 'CFNetwork/.{0,100} Darwin/16\.\d+.{0,100}\(x86_64\)'
|
1330
1424
|
os_replacement: 'Mac OS X'
|
1331
1425
|
os_v1_replacement: '10'
|
1332
1426
|
os_v2_replacement: '12'
|
1333
|
-
- regex: 'CFNetwork/8
|
1427
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/15\.\d+.{0,100}\(x86_64\)'
|
1334
1428
|
os_replacement: 'Mac OS X'
|
1335
1429
|
os_v1_replacement: '10'
|
1336
1430
|
os_v2_replacement: '11'
|
@@ -1338,87 +1432,208 @@ os_parsers:
|
|
1338
1432
|
# CFNetwork iOS Apps
|
1339
1433
|
# @ref: https://en.wikipedia.org/wiki/Darwin_(operating_system)#Release_history
|
1340
1434
|
##########
|
1341
|
-
- regex: 'CFNetwork
|
1435
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(9)\.\d+'
|
1342
1436
|
os_replacement: 'iOS'
|
1343
1437
|
os_v1_replacement: '1'
|
1344
|
-
- regex: 'CFNetwork
|
1438
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(10)\.\d+'
|
1345
1439
|
os_replacement: 'iOS'
|
1346
1440
|
os_v1_replacement: '4'
|
1347
|
-
- regex: 'CFNetwork
|
1441
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(11)\.\d+'
|
1348
1442
|
os_replacement: 'iOS'
|
1349
1443
|
os_v1_replacement: '5'
|
1350
|
-
- regex: 'CFNetwork
|
1444
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(13)\.\d+'
|
1351
1445
|
os_replacement: 'iOS'
|
1352
1446
|
os_v1_replacement: '6'
|
1353
|
-
- regex: 'CFNetwork/6
|
1447
|
+
- regex: 'CFNetwork/6.{0,100} Darwin/(14)\.\d+'
|
1354
1448
|
os_replacement: 'iOS'
|
1355
1449
|
os_v1_replacement: '7'
|
1356
|
-
- regex: 'CFNetwork/7
|
1450
|
+
- regex: 'CFNetwork/7.{0,100} Darwin/(14)\.\d+'
|
1357
1451
|
os_replacement: 'iOS'
|
1358
1452
|
os_v1_replacement: '8'
|
1359
1453
|
os_v2_replacement: '0'
|
1360
|
-
- regex: 'CFNetwork/7
|
1454
|
+
- regex: 'CFNetwork/7.{0,100} Darwin/(15)\.\d+'
|
1361
1455
|
os_replacement: 'iOS'
|
1362
1456
|
os_v1_replacement: '9'
|
1363
1457
|
os_v2_replacement: '0'
|
1364
|
-
- regex: 'CFNetwork/8
|
1458
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/16\.5\.\d+'
|
1365
1459
|
os_replacement: 'iOS'
|
1366
1460
|
os_v1_replacement: '10'
|
1367
1461
|
os_v2_replacement: '3'
|
1368
|
-
- regex: 'CFNetwork/8
|
1462
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/16\.6\.\d+'
|
1369
1463
|
os_replacement: 'iOS'
|
1370
1464
|
os_v1_replacement: '10'
|
1371
1465
|
os_v2_replacement: '3'
|
1372
1466
|
os_v3_replacement: '2'
|
1373
|
-
- regex: 'CFNetwork/8
|
1467
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/16\.7\.\d+'
|
1374
1468
|
os_replacement: 'iOS'
|
1375
1469
|
os_v1_replacement: '10'
|
1376
1470
|
os_v2_replacement: '3'
|
1377
1471
|
os_v3_replacement: '3'
|
1378
|
-
- regex: 'CFNetwork/8
|
1472
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/(16)\.\d+'
|
1379
1473
|
os_replacement: 'iOS'
|
1380
1474
|
os_v1_replacement: '10'
|
1381
|
-
- regex: 'CFNetwork/8
|
1475
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/17\.0\.\d+'
|
1382
1476
|
os_replacement: 'iOS'
|
1383
1477
|
os_v1_replacement: '11'
|
1384
1478
|
os_v2_replacement: '0'
|
1385
|
-
- regex: 'CFNetwork/8
|
1479
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/17\.2\.\d+'
|
1386
1480
|
os_replacement: 'iOS'
|
1387
1481
|
os_v1_replacement: '11'
|
1388
1482
|
os_v2_replacement: '1'
|
1389
|
-
- regex: 'CFNetwork/8
|
1483
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/17\.3\.\d+'
|
1390
1484
|
os_replacement: 'iOS'
|
1391
1485
|
os_v1_replacement: '11'
|
1392
1486
|
os_v2_replacement: '2'
|
1393
|
-
- regex: 'CFNetwork/8
|
1487
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/17\.4\.\d+'
|
1394
1488
|
os_replacement: 'iOS'
|
1395
1489
|
os_v1_replacement: '11'
|
1396
1490
|
os_v2_replacement: '2'
|
1397
1491
|
os_v3_replacement: '6'
|
1398
|
-
- regex: 'CFNetwork/8
|
1492
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/17\.5\.\d+'
|
1399
1493
|
os_replacement: 'iOS'
|
1400
1494
|
os_v1_replacement: '11'
|
1401
1495
|
os_v2_replacement: '3'
|
1402
|
-
- regex: 'CFNetwork/9
|
1496
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/17\.6\.\d+'
|
1403
1497
|
os_replacement: 'iOS'
|
1404
1498
|
os_v1_replacement: '11'
|
1405
1499
|
os_v2_replacement: '4'
|
1406
|
-
- regex: 'CFNetwork/9
|
1500
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/17\.7\.\d+'
|
1407
1501
|
os_replacement: 'iOS'
|
1408
1502
|
os_v1_replacement: '11'
|
1409
1503
|
os_v2_replacement: '4'
|
1410
1504
|
os_v3_replacement: '1'
|
1411
|
-
- regex: 'CFNetwork/8
|
1505
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/(17)\.\d+'
|
1412
1506
|
os_replacement: 'iOS'
|
1413
1507
|
os_v1_replacement: '11'
|
1414
|
-
- regex: 'CFNetwork/9
|
1508
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/18\.0\.\d+'
|
1415
1509
|
os_replacement: 'iOS'
|
1416
1510
|
os_v1_replacement: '12'
|
1417
1511
|
os_v2_replacement: '0'
|
1418
|
-
- regex: 'CFNetwork/9
|
1512
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/18\.2\.\d+'
|
1513
|
+
os_replacement: 'iOS'
|
1514
|
+
os_v1_replacement: '12'
|
1515
|
+
os_v2_replacement: '1'
|
1516
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/18\.5\.\d+'
|
1517
|
+
os_replacement: 'iOS'
|
1518
|
+
os_v1_replacement: '12'
|
1519
|
+
os_v2_replacement: '2'
|
1520
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/18\.6\.\d+'
|
1521
|
+
os_replacement: 'iOS'
|
1522
|
+
os_v1_replacement: '12'
|
1523
|
+
os_v2_replacement: '3'
|
1524
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/18\.7\.\d+'
|
1525
|
+
os_replacement: 'iOS'
|
1526
|
+
os_v1_replacement: '12'
|
1527
|
+
os_v2_replacement: '4'
|
1528
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/(18)\.\d+'
|
1419
1529
|
os_replacement: 'iOS'
|
1420
1530
|
os_v1_replacement: '12'
|
1421
|
-
- regex: 'CFNetwork
|
1531
|
+
- regex: 'CFNetwork/11.{0,100} Darwin/19\.2\.\d+'
|
1532
|
+
os_replacement: 'iOS'
|
1533
|
+
os_v1_replacement: '13'
|
1534
|
+
os_v2_replacement: '3'
|
1535
|
+
- regex: 'CFNetwork/11.{0,100} Darwin/19\.3\.\d+'
|
1536
|
+
os_replacement: 'iOS'
|
1537
|
+
os_v1_replacement: '13'
|
1538
|
+
os_v2_replacement: '3'
|
1539
|
+
os_v3_replacement: '1'
|
1540
|
+
- regex: 'CFNetwork/11.{0,100} Darwin/19\.4\.\d+'
|
1541
|
+
os_replacement: 'iOS'
|
1542
|
+
os_v1_replacement: '13'
|
1543
|
+
os_v2_replacement: '4'
|
1544
|
+
- regex: 'CFNetwork/11.{0,100} Darwin/19\.5\.\d+'
|
1545
|
+
os_replacement: 'iOS'
|
1546
|
+
os_v1_replacement: '13'
|
1547
|
+
os_v2_replacement: '5'
|
1548
|
+
- regex: 'CFNetwork/11.{0,100} Darwin/19\.6\.\d+'
|
1549
|
+
os_replacement: 'iOS'
|
1550
|
+
os_v1_replacement: '13'
|
1551
|
+
os_v2_replacement: '6'
|
1552
|
+
- regex: 'CFNetwork/1[01].{0,100} Darwin/19\.\d+'
|
1553
|
+
os_replacement: 'iOS'
|
1554
|
+
os_v1_replacement: '13'
|
1555
|
+
- regex: 'CFNetwork/12.{0,100} Darwin/20\.1\.\d+'
|
1556
|
+
os_replacement: 'iOS'
|
1557
|
+
os_v1_replacement: '14'
|
1558
|
+
os_v2_replacement: '2'
|
1559
|
+
- regex: 'CFNetwork/12.{0,100} Darwin/20\.2\.\d+'
|
1560
|
+
os_replacement: 'iOS'
|
1561
|
+
os_v1_replacement: '14'
|
1562
|
+
os_v2_replacement: '3'
|
1563
|
+
- regex: 'CFNetwork/12.{0,100} Darwin/20\.3\.\d+'
|
1564
|
+
os_replacement: 'iOS'
|
1565
|
+
os_v1_replacement: '14'
|
1566
|
+
os_v2_replacement: '4'
|
1567
|
+
- regex: 'CFNetwork/12.{0,100} Darwin/20\.4\.\d+'
|
1568
|
+
os_replacement: 'iOS'
|
1569
|
+
os_v1_replacement: '14'
|
1570
|
+
os_v2_replacement: '5'
|
1571
|
+
- regex: 'CFNetwork/12.{0,100} Darwin/20\.5\.\d+'
|
1572
|
+
os_replacement: 'iOS'
|
1573
|
+
os_v1_replacement: '14'
|
1574
|
+
os_v2_replacement: '6'
|
1575
|
+
- regex: 'CFNetwork/12.{0,100} Darwin/20\.6\.\d+'
|
1576
|
+
os_replacement: 'iOS'
|
1577
|
+
os_v1_replacement: '14'
|
1578
|
+
os_v2_replacement: '8'
|
1579
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(20)\.\d+'
|
1580
|
+
os_replacement: 'iOS'
|
1581
|
+
os_v1_replacement: '14'
|
1582
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.0\.\d+'
|
1583
|
+
os_replacement: 'iOS'
|
1584
|
+
os_v1_replacement: '15'
|
1585
|
+
os_v2_replacement: '0'
|
1586
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.1\.\d+'
|
1587
|
+
os_replacement: 'iOS'
|
1588
|
+
os_v1_replacement: '15'
|
1589
|
+
os_v2_replacement: '1'
|
1590
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.2\.\d+'
|
1591
|
+
os_replacement: 'iOS'
|
1592
|
+
os_v1_replacement: '15'
|
1593
|
+
os_v2_replacement: '2'
|
1594
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.3\.\d+'
|
1595
|
+
os_replacement: 'iOS'
|
1596
|
+
os_v1_replacement: '15'
|
1597
|
+
os_v2_replacement: '3'
|
1598
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.4\.\d+'
|
1599
|
+
os_replacement: 'iOS'
|
1600
|
+
os_v1_replacement: '15'
|
1601
|
+
os_v2_replacement: '4'
|
1602
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.5\.\d+'
|
1603
|
+
os_replacement: 'iOS'
|
1604
|
+
os_v1_replacement: '15'
|
1605
|
+
os_v2_replacement: '5'
|
1606
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.6\.\d+'
|
1607
|
+
os_replacement: 'iOS'
|
1608
|
+
os_v1_replacement: '15'
|
1609
|
+
os_v2_replacement: '6'
|
1610
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(21)\.\d+'
|
1611
|
+
os_replacement: 'iOS'
|
1612
|
+
os_v1_replacement: '15'
|
1613
|
+
- regex: 'CFNetwork/.{0,100} Darwin/22\.0\.\d+'
|
1614
|
+
os_replacement: 'iOS'
|
1615
|
+
os_v1_replacement: '16'
|
1616
|
+
os_v2_replacement: '0'
|
1617
|
+
- regex: 'CFNetwork/.{0,100} Darwin/22\.1\.\d+'
|
1618
|
+
os_replacement: 'iOS'
|
1619
|
+
os_v1_replacement: '16'
|
1620
|
+
os_v2_replacement: '1'
|
1621
|
+
- regex: 'CFNetwork/.{0,100} Darwin/22\.2\.\d+'
|
1622
|
+
os_replacement: 'iOS'
|
1623
|
+
os_v1_replacement: '16'
|
1624
|
+
os_v2_replacement: '2'
|
1625
|
+
- regex: 'CFNetwork/.{0,100} Darwin/22\.3\.\d+'
|
1626
|
+
os_replacement: 'iOS'
|
1627
|
+
os_v1_replacement: '16'
|
1628
|
+
os_v2_replacement: '3'
|
1629
|
+
- regex: 'CFNetwork/.{0,100} Darwin/22\.4\.\d+'
|
1630
|
+
os_replacement: 'iOS'
|
1631
|
+
os_v1_replacement: '16'
|
1632
|
+
os_v2_replacement: '4'
|
1633
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(22)\.\d+'
|
1634
|
+
os_replacement: 'iOS'
|
1635
|
+
os_v1_replacement: '16'
|
1636
|
+
- regex: 'CFNetwork/.{0,100} Darwin/'
|
1422
1637
|
os_replacement: 'iOS'
|
1423
1638
|
|
1424
1639
|
# iOS Apps
|
@@ -1429,7 +1644,7 @@ os_parsers:
|
|
1429
1644
|
##########
|
1430
1645
|
# Apple Watch
|
1431
1646
|
##########
|
1432
|
-
- regex: '(watchOS)/(\d+)\.(\d+)(?:\.(\d+)|)'
|
1647
|
+
- regex: '(watchOS)[/ ](\d+)\.(\d+)(?:\.(\d+)|)'
|
1433
1648
|
os_replacement: 'WatchOS'
|
1434
1649
|
|
1435
1650
|
##########################
|
@@ -1472,9 +1687,9 @@ os_parsers:
|
|
1472
1687
|
##########
|
1473
1688
|
- regex: '(Symbian[Oo][Ss])[/ ](\d+)\.(\d+)'
|
1474
1689
|
os_replacement: 'Symbian OS'
|
1475
|
-
- regex: '(Symbian/3)
|
1690
|
+
- regex: '(Symbian/3).{1,200}NokiaBrowser/7\.3'
|
1476
1691
|
os_replacement: 'Symbian^3 Anna'
|
1477
|
-
- regex: '(Symbian/3)
|
1692
|
+
- regex: '(Symbian/3).{1,200}NokiaBrowser/7\.4'
|
1478
1693
|
os_replacement: 'Symbian^3 Belle'
|
1479
1694
|
- regex: '(Symbian/3)'
|
1480
1695
|
os_replacement: 'Symbian^3'
|
@@ -1491,11 +1706,11 @@ os_parsers:
|
|
1491
1706
|
##########
|
1492
1707
|
# BlackBerry devices
|
1493
1708
|
##########
|
1494
|
-
- regex: '(BB10)
|
1709
|
+
- regex: '(BB10);.{1,200}Version/(\d+)\.(\d+)\.(\d+)'
|
1495
1710
|
os_replacement: 'BlackBerry OS'
|
1496
1711
|
- regex: '(Black[Bb]erry)[0-9a-z]+/(\d+)\.(\d+)\.(\d+)(?:\.(\d+)|)'
|
1497
1712
|
os_replacement: 'BlackBerry OS'
|
1498
|
-
- regex: '(Black[Bb]erry)
|
1713
|
+
- regex: '(Black[Bb]erry).{1,200}Version/(\d+)\.(\d+)\.(\d+)(?:\.(\d+)|)'
|
1499
1714
|
os_replacement: 'BlackBerry OS'
|
1500
1715
|
- regex: '(RIM Tablet OS) (\d+)\.(\d+)\.(\d+)'
|
1501
1716
|
os_replacement: 'BlackBerry Tablet OS'
|
@@ -1513,44 +1728,44 @@ os_parsers:
|
|
1513
1728
|
##########
|
1514
1729
|
# Firefox OS
|
1515
1730
|
##########
|
1516
|
-
- regex: '\((?:Mobile|Tablet)
|
1731
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/18.0 Firefox/\d+\.\d+'
|
1517
1732
|
os_replacement: 'Firefox OS'
|
1518
1733
|
os_v1_replacement: '1'
|
1519
1734
|
os_v2_replacement: '0'
|
1520
1735
|
os_v3_replacement: '1'
|
1521
1736
|
|
1522
|
-
- regex: '\((?:Mobile|Tablet)
|
1737
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/18.1 Firefox/\d+\.\d+'
|
1523
1738
|
os_replacement: 'Firefox OS'
|
1524
1739
|
os_v1_replacement: '1'
|
1525
1740
|
os_v2_replacement: '1'
|
1526
1741
|
|
1527
|
-
- regex: '\((?:Mobile|Tablet)
|
1742
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/26.0 Firefox/\d+\.\d+'
|
1528
1743
|
os_replacement: 'Firefox OS'
|
1529
1744
|
os_v1_replacement: '1'
|
1530
1745
|
os_v2_replacement: '2'
|
1531
1746
|
|
1532
|
-
- regex: '\((?:Mobile|Tablet)
|
1747
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/28.0 Firefox/\d+\.\d+'
|
1533
1748
|
os_replacement: 'Firefox OS'
|
1534
1749
|
os_v1_replacement: '1'
|
1535
1750
|
os_v2_replacement: '3'
|
1536
1751
|
|
1537
|
-
- regex: '\((?:Mobile|Tablet)
|
1752
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/30.0 Firefox/\d+\.\d+'
|
1538
1753
|
os_replacement: 'Firefox OS'
|
1539
1754
|
os_v1_replacement: '1'
|
1540
1755
|
os_v2_replacement: '4'
|
1541
1756
|
|
1542
|
-
- regex: '\((?:Mobile|Tablet)
|
1757
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/32.0 Firefox/\d+\.\d+'
|
1543
1758
|
os_replacement: 'Firefox OS'
|
1544
1759
|
os_v1_replacement: '2'
|
1545
1760
|
os_v2_replacement: '0'
|
1546
1761
|
|
1547
|
-
- regex: '\((?:Mobile|Tablet)
|
1762
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/34.0 Firefox/\d+\.\d+'
|
1548
1763
|
os_replacement: 'Firefox OS'
|
1549
1764
|
os_v1_replacement: '2'
|
1550
1765
|
os_v2_replacement: '1'
|
1551
1766
|
|
1552
1767
|
# Firefox OS Generic
|
1553
|
-
- regex: '\((?:Mobile|Tablet)
|
1768
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Firefox/\d+\.\d+'
|
1554
1769
|
os_replacement: 'Firefox OS'
|
1555
1770
|
|
1556
1771
|
|
@@ -1592,7 +1807,7 @@ os_parsers:
|
|
1592
1807
|
- regex: '(Fedora|Red Hat|PCLinuxOS|Puppy|Ubuntu|Kindle|Bada|Sailfish|Lubuntu|BackTrack|Slackware|(?:Free|Open|Net|\b)BSD)[/ ](\d+)\.(\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
|
1593
1808
|
|
1594
1809
|
# Gentoo Linux + Kernel Version
|
1595
|
-
- regex: '(Linux)[ /](\d+)\.(\d+)(?:\.(\d+)|)
|
1810
|
+
- regex: '(Linux)[ /](\d+)\.(\d+)(?:\.(\d+)|).{0,100}gentoo'
|
1596
1811
|
os_replacement: 'Gentoo'
|
1597
1812
|
|
1598
1813
|
# Opera Mini Bada
|
@@ -1600,7 +1815,7 @@ os_parsers:
|
|
1600
1815
|
|
1601
1816
|
# just os
|
1602
1817
|
- regex: '(Windows|Android|WeTab|Maemo|Web0S)'
|
1603
|
-
- regex: '(Ubuntu|Kubuntu|Arch Linux|CentOS|Slackware|Gentoo|openSUSE|SUSE|Red Hat|Fedora|PCLinuxOS|Mageia|(?:Free|Open|Net|\b)BSD)'
|
1818
|
+
- regex: '(Ubuntu|Kubuntu|Arch Linux|CentOS|Slackware|Gentoo|openSUSE|SUSE|Red Hat|Fedora|PCLinuxOS|Mageia|SerenityOS|(?:Free|Open|Net|\b)BSD)'
|
1604
1819
|
# Linux + Kernel Version
|
1605
1820
|
- regex: '(Linux)(?:[ /](\d+)\.(\d+)(?:\.(\d+)|)|)'
|
1606
1821
|
- regex: 'SunOS'
|
@@ -1624,19 +1839,19 @@ device_parsers:
|
|
1624
1839
|
# Mobile Spiders
|
1625
1840
|
# Catch the mobile crawler before checking for iPhones / Androids.
|
1626
1841
|
#########
|
1627
|
-
- regex: '(?:(?:iPhone|Windows CE|Windows Phone|Android)
|
1842
|
+
- regex: '^.{0,100}?(?:(?:iPhone|Windows CE|Windows Phone|Android).{0,300}(?:(?:Bot|Yeti)-Mobile|YRSpider|BingPreview|bots?/\d|(?:bot|spider)\.html)|AdsBot-Google-Mobile.{0,200}iPhone)'
|
1628
1843
|
regex_flag: 'i'
|
1629
1844
|
device_replacement: 'Spider'
|
1630
1845
|
brand_replacement: 'Spider'
|
1631
1846
|
model_replacement: 'Smartphone'
|
1632
|
-
- regex: '(?:DoCoMo|\bMOT\b|\bLG\b|Nokia|Samsung|SonyEricsson)
|
1847
|
+
- regex: '^.{0,100}?(?:DoCoMo|\bMOT\b|\bLG\b|Nokia|Samsung|SonyEricsson).{0,200}(?:(?:Bot|Yeti)-Mobile|bots?/\d|(?:bot|crawler)\.html|(?:jump|google|Wukong)bot|ichiro/mobile|/spider|YahooSeeker)'
|
1633
1848
|
regex_flag: 'i'
|
1634
1849
|
device_replacement: 'Spider'
|
1635
1850
|
brand_replacement: 'Spider'
|
1636
1851
|
model_replacement: 'Feature Phone'
|
1637
1852
|
|
1638
1853
|
# PTST / WebPageTest.org crawlers
|
1639
|
-
- regex: ' PTST/\d+(
|
1854
|
+
- regex: ' PTST/\d+(?:\.\d+|)$'
|
1640
1855
|
device_replacement: 'Spider'
|
1641
1856
|
brand_replacement: 'Spider'
|
1642
1857
|
|
@@ -1646,11 +1861,11 @@ device_parsers:
|
|
1646
1861
|
brand_replacement: 'Spider'
|
1647
1862
|
|
1648
1863
|
# aspiegel.com spider (owned by Huawei)
|
1649
|
-
- regex: 'Mozilla
|
1864
|
+
- regex: 'Mozilla.{1,100}Mobile.{1,100}(AspiegelBot|PetalBot)'
|
1650
1865
|
device_replacement: 'Spider'
|
1651
1866
|
brand_replacement: 'Spider'
|
1652
1867
|
model_replacement: 'Smartphone'
|
1653
|
-
- regex: 'Mozilla
|
1868
|
+
- regex: 'Mozilla.{0,200}(AspiegelBot|PetalBot)'
|
1654
1869
|
device_replacement: 'Spider'
|
1655
1870
|
brand_replacement: 'Spider'
|
1656
1871
|
model_replacement: 'Desktop'
|
@@ -1659,7 +1874,7 @@ device_parsers:
|
|
1659
1874
|
# WebBrowser for SmartWatch
|
1660
1875
|
# @ref: https://play.google.com/store/apps/details?id=se.vaggan.webbrowser&hl=en
|
1661
1876
|
#########
|
1662
|
-
- regex: '\bSmartWatch {0,2}\( {0,2}([^;]
|
1877
|
+
- regex: '\bSmartWatch {0,2}\( {0,2}([^;]{1,200}) {0,2}; {0,2}([^;]{1,200}) {0,2};'
|
1663
1878
|
device_replacement: '$1 $2'
|
1664
1879
|
brand_replacement: '$1'
|
1665
1880
|
model_replacement: '$2'
|
@@ -1671,16 +1886,16 @@ device_parsers:
|
|
1671
1886
|
######################################################################
|
1672
1887
|
|
1673
1888
|
# Android Application
|
1674
|
-
- regex: 'Android Application[^\-]
|
1889
|
+
- regex: 'Android Application[^\-]{1,300} - (Sony) ?(Ericsson|) (.{1,200}) \w{1,20} - '
|
1675
1890
|
device_replacement: '$1 $2'
|
1676
1891
|
brand_replacement: '$1$2'
|
1677
1892
|
model_replacement: '$3'
|
1678
|
-
- regex: 'Android Application[^\-]
|
1893
|
+
- regex: 'Android Application[^\-]{1,300} - (?:HTC|HUAWEI|LGE|LENOVO|MEDION|TCT) (HTC|HUAWEI|LG|LENOVO|MEDION|ALCATEL)[ _\-](.{1,200}) \w{1,20} - '
|
1679
1894
|
regex_flag: 'i'
|
1680
1895
|
device_replacement: '$1 $2'
|
1681
1896
|
brand_replacement: '$1'
|
1682
1897
|
model_replacement: '$2'
|
1683
|
-
- regex: 'Android Application[^\-]
|
1898
|
+
- regex: 'Android Application[^\-]{1,300} - ([^ ]+) (.{1,200}) \w{1,20} - '
|
1684
1899
|
device_replacement: '$1 $2'
|
1685
1900
|
brand_replacement: '$1'
|
1686
1901
|
model_replacement: '$2'
|
@@ -1689,11 +1904,11 @@ device_parsers:
|
|
1689
1904
|
# 3Q
|
1690
1905
|
# @ref: http://www.3q-int.com/
|
1691
1906
|
#########
|
1692
|
-
- regex: ';
|
1907
|
+
- regex: '; {0,2}([BLRQ]C\d{4}[A-Z]{1,100}?)(?: Build|\) AppleWebKit)'
|
1693
1908
|
device_replacement: '3Q $1'
|
1694
1909
|
brand_replacement: '3Q'
|
1695
1910
|
model_replacement: '$1'
|
1696
|
-
- regex: ';
|
1911
|
+
- regex: '; {0,2}(?:3Q_)([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1697
1912
|
device_replacement: '3Q $1'
|
1698
1913
|
brand_replacement: '3Q'
|
1699
1914
|
model_replacement: '$1'
|
@@ -1702,19 +1917,19 @@ device_parsers:
|
|
1702
1917
|
# Acer
|
1703
1918
|
# @ref: http://us.acer.com/ac/en/US/content/group/tablets
|
1704
1919
|
#########
|
1705
|
-
- regex: 'Android [34]
|
1920
|
+
- regex: 'Android [34].{0,200}; {0,2}(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700(?: Lite| 3G|)|A701|B1-A71|A1-\d{3}|B1-\d{3}|V360|V370|W500|W500P|W501|W501P|W510|W511|W700|Slider SL101|DA22[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1706
1921
|
device_replacement: '$1'
|
1707
1922
|
brand_replacement: 'Acer'
|
1708
1923
|
model_replacement: '$1'
|
1709
|
-
- regex: ';
|
1924
|
+
- regex: '; {0,2}Acer Iconia Tab ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1710
1925
|
device_replacement: '$1'
|
1711
1926
|
brand_replacement: 'Acer'
|
1712
1927
|
model_replacement: '$1'
|
1713
|
-
- regex: ';
|
1928
|
+
- regex: '; {0,2}(Z1[1235]0|E320[^/]{0,10}|S500|S510|Liquid[^;/]{0,30}|Iconia A\d+)(?: Build|\) AppleWebKit)'
|
1714
1929
|
device_replacement: '$1'
|
1715
1930
|
brand_replacement: 'Acer'
|
1716
1931
|
model_replacement: '$1'
|
1717
|
-
- regex: ';
|
1932
|
+
- regex: '; {0,2}(Acer |ACER )([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1718
1933
|
device_replacement: '$1$2'
|
1719
1934
|
brand_replacement: 'Acer'
|
1720
1935
|
model_replacement: '$2'
|
@@ -1725,7 +1940,7 @@ device_parsers:
|
|
1725
1940
|
# @note: VegaBean and VegaComb (names derived from jellybean, honeycomb) are
|
1726
1941
|
# custom ROM builds for Vega
|
1727
1942
|
#########
|
1728
|
-
- regex: ';
|
1943
|
+
- regex: '; {0,2}(Advent |)(Vega(?:Bean|Comb|)).{0,200}?(?: Build|\) AppleWebKit)'
|
1729
1944
|
device_replacement: '$1$2'
|
1730
1945
|
brand_replacement: 'Advent'
|
1731
1946
|
model_replacement: '$2'
|
@@ -1734,7 +1949,7 @@ device_parsers:
|
|
1734
1949
|
# Ainol
|
1735
1950
|
# @ref: http://www.ainol.com/plugin.php?identifier=ainol&module=product
|
1736
1951
|
#########
|
1737
|
-
- regex: ';
|
1952
|
+
- regex: '; {0,2}(Ainol |)((?:NOVO|[Nn]ovo)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1738
1953
|
device_replacement: '$1$2'
|
1739
1954
|
brand_replacement: 'Ainol'
|
1740
1955
|
model_replacement: '$2'
|
@@ -1743,12 +1958,12 @@ device_parsers:
|
|
1743
1958
|
# Airis
|
1744
1959
|
# @ref: http://airis.es/Tienda/Default.aspx?idG=001
|
1745
1960
|
#########
|
1746
|
-
- regex: ';
|
1961
|
+
- regex: '; {0,2}AIRIS[ _\-]?([^/;\)]+) {0,2}(?:;|\)|Build)'
|
1747
1962
|
regex_flag: 'i'
|
1748
1963
|
device_replacement: '$1'
|
1749
1964
|
brand_replacement: 'Airis'
|
1750
1965
|
model_replacement: '$1'
|
1751
|
-
- regex: ';
|
1966
|
+
- regex: '; {0,2}(OnePAD[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1752
1967
|
regex_flag: 'i'
|
1753
1968
|
device_replacement: '$1'
|
1754
1969
|
brand_replacement: 'Airis'
|
@@ -1758,7 +1973,7 @@ device_parsers:
|
|
1758
1973
|
# Airpad
|
1759
1974
|
# @ref: ??
|
1760
1975
|
#########
|
1761
|
-
- regex: ';
|
1976
|
+
- regex: '; {0,2}Airpad[ \-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1762
1977
|
device_replacement: 'Airpad $1'
|
1763
1978
|
brand_replacement: 'Airpad'
|
1764
1979
|
model_replacement: '$1'
|
@@ -1767,29 +1982,29 @@ device_parsers:
|
|
1767
1982
|
# Alcatel - TCT
|
1768
1983
|
# @ref: http://www.alcatelonetouch.com/global-en/products/smartphones.html
|
1769
1984
|
#########
|
1770
|
-
- regex: ';
|
1985
|
+
- regex: '; {0,2}(one ?touch) (EVO7|T10|T20)(?: Build|\) AppleWebKit)'
|
1771
1986
|
device_replacement: 'Alcatel One Touch $2'
|
1772
1987
|
brand_replacement: 'Alcatel'
|
1773
1988
|
model_replacement: 'One Touch $2'
|
1774
|
-
- regex: ';
|
1989
|
+
- regex: '; {0,2}(?:alcatel[ _]|)(?:(?:one[ _]?touch[ _])|ot[ \-])([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1775
1990
|
regex_flag: 'i'
|
1776
1991
|
device_replacement: 'Alcatel One Touch $1'
|
1777
1992
|
brand_replacement: 'Alcatel'
|
1778
1993
|
model_replacement: 'One Touch $1'
|
1779
|
-
- regex: ';
|
1994
|
+
- regex: '; {0,2}(TCL)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1780
1995
|
device_replacement: '$1 $2'
|
1781
1996
|
brand_replacement: '$1'
|
1782
1997
|
model_replacement: '$2'
|
1783
1998
|
# operator specific models
|
1784
|
-
- regex: ';
|
1999
|
+
- regex: '; {0,2}(Vodafone Smart II|Optimus_Madrid)(?: Build|\) AppleWebKit)'
|
1785
2000
|
device_replacement: 'Alcatel $1'
|
1786
2001
|
brand_replacement: 'Alcatel'
|
1787
2002
|
model_replacement: '$1'
|
1788
|
-
- regex: ';
|
2003
|
+
- regex: '; {0,2}BASE_Lutea_3(?: Build|\) AppleWebKit)'
|
1789
2004
|
device_replacement: 'Alcatel One Touch 998'
|
1790
2005
|
brand_replacement: 'Alcatel'
|
1791
2006
|
model_replacement: 'One Touch 998'
|
1792
|
-
- regex: ';
|
2007
|
+
- regex: '; {0,2}BASE_Varia(?: Build|\) AppleWebKit)'
|
1793
2008
|
device_replacement: 'Alcatel One Touch 918D'
|
1794
2009
|
brand_replacement: 'Alcatel'
|
1795
2010
|
model_replacement: 'One Touch 918D'
|
@@ -1798,7 +2013,7 @@ device_parsers:
|
|
1798
2013
|
# Allfine
|
1799
2014
|
# @ref: http://www.myallfine.com/Products.asp
|
1800
2015
|
#########
|
1801
|
-
- regex: ';
|
2016
|
+
- regex: '; {0,2}((?:FINE|Fine)\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1802
2017
|
device_replacement: '$1'
|
1803
2018
|
brand_replacement: 'Allfine'
|
1804
2019
|
model_replacement: '$1'
|
@@ -1807,15 +2022,15 @@ device_parsers:
|
|
1807
2022
|
# Allview
|
1808
2023
|
# @ref: http://www.allview.ro/produse/droseries/lista-tablete-pc/
|
1809
2024
|
#########
|
1810
|
-
- regex: ';
|
2025
|
+
- regex: '; {0,2}(ALLVIEW[ _]?|Allview[ _]?)((?:Speed|SPEED).{0,200}?)(?: Build|\) AppleWebKit)'
|
1811
2026
|
device_replacement: '$1$2'
|
1812
2027
|
brand_replacement: 'Allview'
|
1813
2028
|
model_replacement: '$2'
|
1814
|
-
- regex: ';
|
2029
|
+
- regex: '; {0,2}(ALLVIEW[ _]?|Allview[ _]?|)(AX1_Shine|AX2_Frenzy)(?: Build|\) AppleWebKit)'
|
1815
2030
|
device_replacement: '$1$2'
|
1816
2031
|
brand_replacement: 'Allview'
|
1817
2032
|
model_replacement: '$2'
|
1818
|
-
- regex: ';
|
2033
|
+
- regex: '; {0,2}(ALLVIEW[ _]?|Allview[ _]?)([^;/]*?)(?: Build|\) AppleWebKit)'
|
1819
2034
|
device_replacement: '$1$2'
|
1820
2035
|
brand_replacement: 'Allview'
|
1821
2036
|
model_replacement: '$2'
|
@@ -1825,11 +2040,11 @@ device_parsers:
|
|
1825
2040
|
# @ref: http://www.allwinner.com/
|
1826
2041
|
# @models: A31 (13.3"),A20,A10,
|
1827
2042
|
#########
|
1828
|
-
- regex: ';
|
2043
|
+
- regex: '; {0,2}(A13-MID)(?: Build|\) AppleWebKit)'
|
1829
2044
|
device_replacement: '$1'
|
1830
2045
|
brand_replacement: 'Allwinner'
|
1831
2046
|
model_replacement: '$1'
|
1832
|
-
- regex: ';
|
2047
|
+
- regex: '; {0,2}(Allwinner)[ _\-]?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1833
2048
|
device_replacement: '$1 $2'
|
1834
2049
|
brand_replacement: 'Allwinner'
|
1835
2050
|
model_replacement: '$1'
|
@@ -1838,7 +2053,7 @@ device_parsers:
|
|
1838
2053
|
# Amaway
|
1839
2054
|
# @ref: http://www.amaway.cn/
|
1840
2055
|
#########
|
1841
|
-
- regex: ';
|
2056
|
+
- regex: '; {0,2}(A651|A701B?|A702|A703|A705|A706|A707|A711|A712|A713|A717|A722|A785|A801|A802|A803|A901|A902|A1002|A1003|A1006|A1007|A9701|A9703|Q710|Q80)(?: Build|\) AppleWebKit)'
|
1842
2057
|
device_replacement: '$1'
|
1843
2058
|
brand_replacement: 'Amaway'
|
1844
2059
|
model_replacement: '$1'
|
@@ -1847,11 +2062,11 @@ device_parsers:
|
|
1847
2062
|
# Amoi
|
1848
2063
|
# @ref: http://www.amoi.com/en/prd/prd_index.jspx
|
1849
2064
|
#########
|
1850
|
-
- regex: ';
|
2065
|
+
- regex: '; {0,2}(?:AMOI|Amoi)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1851
2066
|
device_replacement: 'Amoi $1'
|
1852
2067
|
brand_replacement: 'Amoi'
|
1853
2068
|
model_replacement: '$1'
|
1854
|
-
- regex: '^(?:AMOI|Amoi)[ _]([^;/]
|
2069
|
+
- regex: '^(?:AMOI|Amoi)[ _]([^;/]{1,100}?) Linux'
|
1855
2070
|
device_replacement: 'Amoi $1'
|
1856
2071
|
brand_replacement: 'Amoi'
|
1857
2072
|
model_replacement: '$1'
|
@@ -1860,7 +2075,7 @@ device_parsers:
|
|
1860
2075
|
# Aoc
|
1861
2076
|
# @ref: http://latin.aoc.com/media_tablet
|
1862
2077
|
#########
|
1863
|
-
- regex: ';
|
2078
|
+
- regex: '; {0,2}(MW(?:0[789]|10)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1864
2079
|
device_replacement: '$1'
|
1865
2080
|
brand_replacement: 'Aoc'
|
1866
2081
|
model_replacement: '$1'
|
@@ -1871,11 +2086,11 @@ device_parsers:
|
|
1871
2086
|
# @ref: http://www.luckystar.com.cn/en/mobiletel.aspx?page=1
|
1872
2087
|
# @note: brand owned by luckystar
|
1873
2088
|
#########
|
1874
|
-
- regex: ';
|
2089
|
+
- regex: '; {0,2}(G7|M1013|M1015G|M11[CG]?|M-?12[B]?|M15|M19[G]?|M30[ACQ]?|M31[GQ]|M32|M33[GQ]|M36|M37|M38|M701T|M710|M712B|M713|M715G|M716G|M71(?:G|GS|T|)|M72[T]?|M73[T]?|M75[GT]?|M77G|M79T|M7L|M7LN|M81|M810|M81T|M82|M92|M92KS|M92S|M717G|M721|M722G|M723|M725G|M739|M785|M791|M92SK|M93D)(?: Build|\) AppleWebKit)'
|
1875
2090
|
device_replacement: 'Aoson $1'
|
1876
2091
|
brand_replacement: 'Aoson'
|
1877
2092
|
model_replacement: '$1'
|
1878
|
-
- regex: ';
|
2093
|
+
- regex: '; {0,2}Aoson ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1879
2094
|
regex_flag: 'i'
|
1880
2095
|
device_replacement: 'Aoson $1'
|
1881
2096
|
brand_replacement: 'Aoson'
|
@@ -1885,7 +2100,7 @@ device_parsers:
|
|
1885
2100
|
# Apanda
|
1886
2101
|
# @ref: http://www.apanda.com.cn/
|
1887
2102
|
#########
|
1888
|
-
- regex: ';
|
2103
|
+
- regex: '; {0,2}[Aa]panda[ _\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1889
2104
|
device_replacement: 'Apanda $1'
|
1890
2105
|
brand_replacement: 'Apanda'
|
1891
2106
|
model_replacement: '$1'
|
@@ -1895,23 +2110,23 @@ device_parsers:
|
|
1895
2110
|
# @ref: http://www.archos.com/de/products/tablets.html
|
1896
2111
|
# @ref: http://www.archos.com/de/products/smartphones/index.html
|
1897
2112
|
#########
|
1898
|
-
- regex: ';
|
2113
|
+
- regex: '; {0,2}(?:ARCHOS|Archos) ?(GAMEPAD.{0,200}?)(?: Build|\) AppleWebKit)'
|
1899
2114
|
device_replacement: 'Archos $1'
|
1900
2115
|
brand_replacement: 'Archos'
|
1901
2116
|
model_replacement: '$1'
|
1902
|
-
- regex: 'ARCHOS; GOGI; ([^;]
|
2117
|
+
- regex: 'ARCHOS; GOGI; ([^;]{1,200});'
|
1903
2118
|
device_replacement: 'Archos $1'
|
1904
2119
|
brand_replacement: 'Archos'
|
1905
2120
|
model_replacement: '$1'
|
1906
|
-
- regex: '(?:ARCHOS|Archos)[ _]?(
|
2121
|
+
- regex: '(?:ARCHOS|Archos)[ _]?(.{0,200}?)(?: Build|[;/\(\)\-]|$)'
|
1907
2122
|
device_replacement: 'Archos $1'
|
1908
2123
|
brand_replacement: 'Archos'
|
1909
2124
|
model_replacement: '$1'
|
1910
|
-
- regex: ';
|
2125
|
+
- regex: '; {0,2}(AN(?:7|8|9|10|13)[A-Z0-9]{1,4})(?: Build|\) AppleWebKit)'
|
1911
2126
|
device_replacement: 'Archos $1'
|
1912
2127
|
brand_replacement: 'Archos'
|
1913
2128
|
model_replacement: '$1'
|
1914
|
-
- regex: ';
|
2129
|
+
- regex: '; {0,2}(A28|A32|A43|A70(?:BHT|CHT|HB|S|X)|A101(?:B|C|IT)|A7EB|A7EB-WK|101G9|80G9)(?: Build|\) AppleWebKit)'
|
1915
2130
|
device_replacement: 'Archos $1'
|
1916
2131
|
brand_replacement: 'Archos'
|
1917
2132
|
model_replacement: '$1'
|
@@ -1920,11 +2135,11 @@ device_parsers:
|
|
1920
2135
|
# A-rival
|
1921
2136
|
# @ref: http://www.a-rival.de/de/
|
1922
2137
|
#########
|
1923
|
-
- regex: ';
|
2138
|
+
- regex: '; {0,2}(PAD-FMD[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1924
2139
|
device_replacement: '$1'
|
1925
2140
|
brand_replacement: 'Arival'
|
1926
2141
|
model_replacement: '$1'
|
1927
|
-
- regex: ';
|
2142
|
+
- regex: '; {0,2}(BioniQ) ?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1928
2143
|
device_replacement: '$1 $2'
|
1929
2144
|
brand_replacement: 'Arival'
|
1930
2145
|
model_replacement: '$1 $2'
|
@@ -1933,11 +2148,11 @@ device_parsers:
|
|
1933
2148
|
# Arnova
|
1934
2149
|
# @ref: http://arnovatech.com/
|
1935
2150
|
#########
|
1936
|
-
- regex: ';
|
2151
|
+
- regex: '; {0,2}(AN\d[^;/]{1,100}|ARCHM\d+)(?: Build|\) AppleWebKit)'
|
1937
2152
|
device_replacement: 'Arnova $1'
|
1938
2153
|
brand_replacement: 'Arnova'
|
1939
2154
|
model_replacement: '$1'
|
1940
|
-
- regex: ';
|
2155
|
+
- regex: '; {0,2}(?:ARNOVA|Arnova) ?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1941
2156
|
device_replacement: 'Arnova $1'
|
1942
2157
|
brand_replacement: 'Arnova'
|
1943
2158
|
model_replacement: '$1'
|
@@ -1946,7 +2161,7 @@ device_parsers:
|
|
1946
2161
|
# Assistant
|
1947
2162
|
# @ref: http://www.assistant.ua
|
1948
2163
|
#########
|
1949
|
-
- regex: ';
|
2164
|
+
- regex: '; {0,2}(?:ASSISTANT |)(AP)-?([1789]\d{2}[A-Z]{0,2}|80104)(?: Build|\) AppleWebKit)'
|
1950
2165
|
device_replacement: 'Assistant $1-$2'
|
1951
2166
|
brand_replacement: 'Assistant'
|
1952
2167
|
model_replacement: '$1-$2'
|
@@ -1955,11 +2170,11 @@ device_parsers:
|
|
1955
2170
|
# Asus
|
1956
2171
|
# @ref: http://www.asus.com/uk/Tablets_Mobile/
|
1957
2172
|
#########
|
1958
|
-
- regex: ';
|
2173
|
+
- regex: '; {0,2}(ME17\d[^;/]*|ME3\d{2}[^;/]{1,100}|K00[A-Z]|Nexus 10|Nexus 7(?: 2013|)|PadFone[^;/]*|Transformer[^;/]*|TF\d{3}[^;/]*|eeepc)(?: Build|\) AppleWebKit)'
|
1959
2174
|
device_replacement: 'Asus $1'
|
1960
2175
|
brand_replacement: 'Asus'
|
1961
2176
|
model_replacement: '$1'
|
1962
|
-
- regex: ';
|
2177
|
+
- regex: '; {0,2}ASUS[ _]{0,10}([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1963
2178
|
device_replacement: 'Asus $1'
|
1964
2179
|
brand_replacement: 'Asus'
|
1965
2180
|
model_replacement: '$1'
|
@@ -1967,11 +2182,11 @@ device_parsers:
|
|
1967
2182
|
#########
|
1968
2183
|
# Garmin-Asus
|
1969
2184
|
#########
|
1970
|
-
- regex: ';
|
2185
|
+
- regex: '; {0,2}Garmin-Asus ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1971
2186
|
device_replacement: 'Garmin-Asus $1'
|
1972
2187
|
brand_replacement: 'Garmin-Asus'
|
1973
2188
|
model_replacement: '$1'
|
1974
|
-
- regex: ';
|
2189
|
+
- regex: '; {0,2}(Garminfone)(?: Build|\) AppleWebKit)'
|
1975
2190
|
device_replacement: 'Garmin $1'
|
1976
2191
|
brand_replacement: 'Garmin-Asus'
|
1977
2192
|
model_replacement: '$1'
|
@@ -1980,7 +2195,7 @@ device_parsers:
|
|
1980
2195
|
# Attab
|
1981
2196
|
# @ref: http://www.theattab.com/
|
1982
2197
|
#########
|
1983
|
-
- regex: '; (@TAB-[^;/]
|
2198
|
+
- regex: '; (@TAB-[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1984
2199
|
device_replacement: '$1'
|
1985
2200
|
brand_replacement: 'Attab'
|
1986
2201
|
model_replacement: '$1'
|
@@ -1990,7 +2205,7 @@ device_parsers:
|
|
1990
2205
|
# @ref: ??
|
1991
2206
|
# @note: Take care with Docomo T-01 Toshiba
|
1992
2207
|
#########
|
1993
|
-
- regex: ';
|
2208
|
+
- regex: '; {0,2}(T-(?:07|[^0]\d)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1994
2209
|
device_replacement: '$1'
|
1995
2210
|
brand_replacement: 'Audiosonic'
|
1996
2211
|
model_replacement: '$1'
|
@@ -1999,7 +2214,7 @@ device_parsers:
|
|
1999
2214
|
# Axioo
|
2000
2215
|
# @ref: http://www.axiooworld.com/ww/index.php
|
2001
2216
|
#########
|
2002
|
-
- regex: ';
|
2217
|
+
- regex: '; {0,2}(?:Axioo[ _\-]([^;/]{1,100}?)|(picopad)[ _\-]([^;/]{1,100}?))(?: Build|\) AppleWebKit)'
|
2003
2218
|
regex_flag: 'i'
|
2004
2219
|
device_replacement: 'Axioo $1$2 $3'
|
2005
2220
|
brand_replacement: 'Axioo'
|
@@ -2009,7 +2224,7 @@ device_parsers:
|
|
2009
2224
|
# Azend
|
2010
2225
|
# @ref: http://azendcorp.com/index.php/products/portable-electronics
|
2011
2226
|
#########
|
2012
|
-
- regex: ';
|
2227
|
+
- regex: '; {0,2}(V(?:100|700|800)[^;/]*)(?: Build|\) AppleWebKit)'
|
2013
2228
|
device_replacement: '$1'
|
2014
2229
|
brand_replacement: 'Azend'
|
2015
2230
|
model_replacement: '$1'
|
@@ -2018,7 +2233,7 @@ device_parsers:
|
|
2018
2233
|
# Bak
|
2019
2234
|
# @ref: http://www.bakinternational.com/produtos.php?cat=80
|
2020
2235
|
#########
|
2021
|
-
- regex: ';
|
2236
|
+
- regex: '; {0,2}(IBAK\-[^;/]*)(?: Build|\) AppleWebKit)'
|
2022
2237
|
regex_flag: 'i'
|
2023
2238
|
device_replacement: '$1'
|
2024
2239
|
brand_replacement: 'Bak'
|
@@ -2029,7 +2244,7 @@ device_parsers:
|
|
2029
2244
|
# @ref: http://www.bedove.com/product.html
|
2030
2245
|
# @models: HY6501|HY5001|X12|X21|I5
|
2031
2246
|
#########
|
2032
|
-
- regex: ';
|
2247
|
+
- regex: '; {0,2}(HY5001|HY6501|X12|X21|I5)(?: Build|\) AppleWebKit)'
|
2033
2248
|
device_replacement: 'Bedove $1'
|
2034
2249
|
brand_replacement: 'Bedove'
|
2035
2250
|
model_replacement: '$1'
|
@@ -2038,7 +2253,7 @@ device_parsers:
|
|
2038
2253
|
# Benss
|
2039
2254
|
# @ref: http://www.benss.net/
|
2040
2255
|
#########
|
2041
|
-
- regex: ';
|
2256
|
+
- regex: '; {0,2}(JC-[^;/]*)(?: Build|\) AppleWebKit)'
|
2042
2257
|
device_replacement: 'Benss $1'
|
2043
2258
|
brand_replacement: 'Benss'
|
2044
2259
|
model_replacement: '$1'
|
@@ -2048,7 +2263,7 @@ device_parsers:
|
|
2048
2263
|
# @ref: http://uk.blackberry.com/
|
2049
2264
|
# @note: Android Apps seams to be used here
|
2050
2265
|
#########
|
2051
|
-
- regex: ';
|
2266
|
+
- regex: '; {0,2}(BB) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2052
2267
|
device_replacement: '$1 $2'
|
2053
2268
|
brand_replacement: 'Blackberry'
|
2054
2269
|
model_replacement: '$2'
|
@@ -2057,11 +2272,11 @@ device_parsers:
|
|
2057
2272
|
# Blackbird
|
2058
2273
|
# @ref: http://iblackbird.co.kr
|
2059
2274
|
#########
|
2060
|
-
- regex: ';
|
2275
|
+
- regex: '; {0,2}(BlackBird)[ _](I8.{0,200}?)(?: Build|\) AppleWebKit)'
|
2061
2276
|
device_replacement: '$1 $2'
|
2062
2277
|
brand_replacement: '$1'
|
2063
2278
|
model_replacement: '$2'
|
2064
|
-
- regex: ';
|
2279
|
+
- regex: '; {0,2}(BlackBird)[ _](.{0,200}?)(?: Build|\) AppleWebKit)'
|
2065
2280
|
device_replacement: '$1 $2'
|
2066
2281
|
brand_replacement: '$1'
|
2067
2282
|
model_replacement: '$2'
|
@@ -2071,7 +2286,7 @@ device_parsers:
|
|
2071
2286
|
# @ref: http://www.blaupunkt.com
|
2072
2287
|
#########
|
2073
2288
|
# Endeavour
|
2074
|
-
- regex: ';
|
2289
|
+
- regex: '; {0,2}([0-9]+BP[EM][^;/]*|Endeavour[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2075
2290
|
device_replacement: 'Blaupunkt $1'
|
2076
2291
|
brand_replacement: 'Blaupunkt'
|
2077
2292
|
model_replacement: '$1'
|
@@ -2080,12 +2295,12 @@ device_parsers:
|
|
2080
2295
|
# Blu
|
2081
2296
|
# @ref: http://bluproducts.com
|
2082
2297
|
#########
|
2083
|
-
- regex: ';
|
2298
|
+
- regex: '; {0,2}((?:BLU|Blu)[ _\-])([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2084
2299
|
device_replacement: '$1$2'
|
2085
2300
|
brand_replacement: 'Blu'
|
2086
2301
|
model_replacement: '$2'
|
2087
2302
|
# BMOBILE = operator branded device
|
2088
|
-
- regex: ';
|
2303
|
+
- regex: '; {0,2}(?:BMOBILE )?(Blu|BLU|DASH [^;/]{1,100}|VIVO 4\.3|TANK 4\.5)(?: Build|\) AppleWebKit)'
|
2089
2304
|
device_replacement: '$1'
|
2090
2305
|
brand_replacement: 'Blu'
|
2091
2306
|
model_replacement: '$1'
|
@@ -2095,7 +2310,7 @@ device_parsers:
|
|
2095
2310
|
# @ref: http://www.blusens.com/es/?sg=1&sv=al&roc=1
|
2096
2311
|
#########
|
2097
2312
|
# tablet
|
2098
|
-
- regex: ';
|
2313
|
+
- regex: '; {0,2}(TOUCH\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2099
2314
|
device_replacement: '$1'
|
2100
2315
|
brand_replacement: 'Blusens'
|
2101
2316
|
model_replacement: '$1'
|
@@ -2106,7 +2321,7 @@ device_parsers:
|
|
2106
2321
|
# @note: Might collide with Maxx as AX is used also there.
|
2107
2322
|
#########
|
2108
2323
|
# smartphone
|
2109
|
-
- regex: ';
|
2324
|
+
- regex: '; {0,2}(AX5\d+)(?: Build|\) AppleWebKit)'
|
2110
2325
|
device_replacement: '$1'
|
2111
2326
|
brand_replacement: 'Bmobile'
|
2112
2327
|
model_replacement: '$1'
|
@@ -2115,11 +2330,11 @@ device_parsers:
|
|
2115
2330
|
# bq
|
2116
2331
|
# @ref: http://bqreaders.com
|
2117
2332
|
#########
|
2118
|
-
- regex: ';
|
2333
|
+
- regex: '; {0,2}([Bb]q) ([^;/]{1,100}?);?(?: Build|\) AppleWebKit)'
|
2119
2334
|
device_replacement: '$1 $2'
|
2120
2335
|
brand_replacement: 'bq'
|
2121
2336
|
model_replacement: '$2'
|
2122
|
-
- regex: ';
|
2337
|
+
- regex: '; {0,2}(Maxwell [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2123
2338
|
device_replacement: '$1'
|
2124
2339
|
brand_replacement: 'bq'
|
2125
2340
|
model_replacement: '$1'
|
@@ -2128,7 +2343,7 @@ device_parsers:
|
|
2128
2343
|
# Braun Phototechnik
|
2129
2344
|
# @ref: http://www.braun-phototechnik.de/en/products/list/~pcat.250/Tablet-PC.html
|
2130
2345
|
#########
|
2131
|
-
- regex: ';
|
2346
|
+
- regex: '; {0,2}((?:B-Tab|B-TAB) ?\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2132
2347
|
device_replacement: '$1'
|
2133
2348
|
brand_replacement: 'Braun'
|
2134
2349
|
model_replacement: '$1'
|
@@ -2137,7 +2352,7 @@ device_parsers:
|
|
2137
2352
|
# Broncho
|
2138
2353
|
# @ref: http://www.broncho.cn/
|
2139
2354
|
#########
|
2140
|
-
- regex: ';
|
2355
|
+
- regex: '; {0,2}(Broncho) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2141
2356
|
device_replacement: '$1 $2'
|
2142
2357
|
brand_replacement: '$1'
|
2143
2358
|
model_replacement: '$2'
|
@@ -2146,7 +2361,7 @@ device_parsers:
|
|
2146
2361
|
# Captiva
|
2147
2362
|
# @ref: http://www.captiva-power.de
|
2148
2363
|
#########
|
2149
|
-
- regex: ';
|
2364
|
+
- regex: '; {0,2}CAPTIVA ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2150
2365
|
device_replacement: 'Captiva $1'
|
2151
2366
|
brand_replacement: 'Captiva'
|
2152
2367
|
model_replacement: '$1'
|
@@ -2155,7 +2370,7 @@ device_parsers:
|
|
2155
2370
|
# Casio
|
2156
2371
|
# @ref: http://www.casiogzone.com/
|
2157
2372
|
#########
|
2158
|
-
- regex: ';
|
2373
|
+
- regex: '; {0,2}(C771|CAL21|IS11CA)(?: Build|\) AppleWebKit)'
|
2159
2374
|
device_replacement: '$1'
|
2160
2375
|
brand_replacement: 'Casio'
|
2161
2376
|
model_replacement: '$1'
|
@@ -2164,15 +2379,15 @@ device_parsers:
|
|
2164
2379
|
# Cat
|
2165
2380
|
# @ref: http://www.cat-sound.com
|
2166
2381
|
#########
|
2167
|
-
- regex: ';
|
2382
|
+
- regex: '; {0,2}(?:Cat|CAT) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2168
2383
|
device_replacement: 'Cat $1'
|
2169
2384
|
brand_replacement: 'Cat'
|
2170
2385
|
model_replacement: '$1'
|
2171
|
-
- regex: ';
|
2386
|
+
- regex: '; {0,2}(?:Cat)(Nova.{0,200}?)(?: Build|\) AppleWebKit)'
|
2172
2387
|
device_replacement: 'Cat $1'
|
2173
2388
|
brand_replacement: 'Cat'
|
2174
2389
|
model_replacement: '$1'
|
2175
|
-
- regex: ';
|
2390
|
+
- regex: '; {0,2}(INM8002KP|ADM8000KP_[AB])(?: Build|\) AppleWebKit)'
|
2176
2391
|
device_replacement: '$1'
|
2177
2392
|
brand_replacement: 'Cat'
|
2178
2393
|
model_replacement: 'Tablet PHOENIX 8.1J0'
|
@@ -2182,7 +2397,7 @@ device_parsers:
|
|
2182
2397
|
# @ref: http://www.celkonmobiles.com/?_a=products
|
2183
2398
|
# @models: A10, A19Q, A101, A105, A107, A107\+, A112, A118, A119, A119Q, A15, A19, A20, A200, A220, A225, A22 Race, A27, A58, A59, A60, A62, A63, A64, A66, A67, A69, A75, A77, A79, A8\+, A83, A85, A86, A87, A89 Ultima, A9\+, A90, A900, A95, A97i, A98, AR 40, AR 45, AR 50, ML5
|
2184
2399
|
#########
|
2185
|
-
- regex: ';
|
2400
|
+
- regex: '; {0,2}(?:[Cc]elkon[ _\*]|CELKON[ _\*])([^;/\)]+) ?(?:Build|;|\))'
|
2186
2401
|
device_replacement: '$1'
|
2187
2402
|
brand_replacement: 'Celkon'
|
2188
2403
|
model_replacement: '$1'
|
@@ -2190,12 +2405,12 @@ device_parsers:
|
|
2190
2405
|
device_replacement: '$1'
|
2191
2406
|
brand_replacement: 'Celkon'
|
2192
2407
|
model_replacement: '$1'
|
2193
|
-
- regex: ';
|
2408
|
+
- regex: '; {0,2}(CT)-?(\d+)(?: Build|\) AppleWebKit)'
|
2194
2409
|
device_replacement: '$1$2'
|
2195
2410
|
brand_replacement: 'Celkon'
|
2196
2411
|
model_replacement: '$1$2'
|
2197
2412
|
# smartphones
|
2198
|
-
- regex: ';
|
2413
|
+
- regex: '; {0,2}(A19|A19Q|A105|A107[^;/\)]*) ?(?:Build|;|\))'
|
2199
2414
|
device_replacement: '$1'
|
2200
2415
|
brand_replacement: 'Celkon'
|
2201
2416
|
model_replacement: '$1'
|
@@ -2206,7 +2421,7 @@ device_parsers:
|
|
2206
2421
|
# @brief: China manufacturer makes tablets for different small brands
|
2207
2422
|
# (eg. http://www.zeepad.net/index.html)
|
2208
2423
|
#########
|
2209
|
-
- regex: ';
|
2424
|
+
- regex: '; {0,2}(TPC[0-9]{4,5})(?: Build|\) AppleWebKit)'
|
2210
2425
|
device_replacement: '$1'
|
2211
2426
|
brand_replacement: 'ChangJia'
|
2212
2427
|
model_replacement: '$1'
|
@@ -2215,15 +2430,15 @@ device_parsers:
|
|
2215
2430
|
# Cloudfone
|
2216
2431
|
# @ref: http://www.cloudfonemobile.com/
|
2217
2432
|
#########
|
2218
|
-
- regex: ';
|
2433
|
+
- regex: '; {0,2}(Cloudfone)[ _](Excite)([^ ][^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2219
2434
|
device_replacement: '$1 $2 $3'
|
2220
2435
|
brand_replacement: 'Cloudfone'
|
2221
2436
|
model_replacement: '$1 $2 $3'
|
2222
|
-
- regex: ';
|
2437
|
+
- regex: '; {0,2}(Excite|ICE)[ _](\d+[^;/]{0,100}?)(?: Build|\) AppleWebKit)'
|
2223
2438
|
device_replacement: 'Cloudfone $1 $2'
|
2224
2439
|
brand_replacement: 'Cloudfone'
|
2225
2440
|
model_replacement: 'Cloudfone $1 $2'
|
2226
|
-
- regex: ';
|
2441
|
+
- regex: '; {0,2}(Cloudfone|CloudPad)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2227
2442
|
device_replacement: '$1 $2'
|
2228
2443
|
brand_replacement: 'Cloudfone'
|
2229
2444
|
model_replacement: '$1 $2'
|
@@ -2232,7 +2447,7 @@ device_parsers:
|
|
2232
2447
|
# Cmx
|
2233
2448
|
# @ref: http://cmx.at/de/
|
2234
2449
|
#########
|
2235
|
-
- regex: ';
|
2450
|
+
- regex: '; {0,2}((?:Aquila|Clanga|Rapax)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2236
2451
|
regex_flag: 'i'
|
2237
2452
|
device_replacement: '$1'
|
2238
2453
|
brand_replacement: 'Cmx'
|
@@ -2243,7 +2458,7 @@ device_parsers:
|
|
2243
2458
|
# @ref: http://cobykyros.com
|
2244
2459
|
# @note: Be careful with MID\d{3} from MpMan or Manta
|
2245
2460
|
#########
|
2246
|
-
- regex: ';
|
2461
|
+
- regex: '; {0,2}(?:CFW-|Kyros )?(MID[0-9]{4}(?:[ABC]|SR|TV)?)(\(3G\)-4G| GB 8K| 3G| 8K| GB)? {0,2}(?:Build|[;\)])'
|
2247
2462
|
device_replacement: 'CobyKyros $1$2'
|
2248
2463
|
brand_replacement: 'CobyKyros'
|
2249
2464
|
model_replacement: '$1$2'
|
@@ -2252,7 +2467,7 @@ device_parsers:
|
|
2252
2467
|
# Coolpad
|
2253
2468
|
# @ref: ??
|
2254
2469
|
#########
|
2255
|
-
- regex: ';
|
2470
|
+
- regex: '; {0,2}([^;/]{0,50})Coolpad[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2256
2471
|
device_replacement: '$1$2'
|
2257
2472
|
brand_replacement: 'Coolpad'
|
2258
2473
|
model_replacement: '$1$2'
|
@@ -2261,7 +2476,7 @@ device_parsers:
|
|
2261
2476
|
# Cube
|
2262
2477
|
# @ref: http://www.cube-tablet.com/buy-products.html
|
2263
2478
|
#########
|
2264
|
-
- regex: ';
|
2479
|
+
- regex: '; {0,2}(CUBE[ _])?([KU][0-9]+ ?GT.{0,200}?|A5300)(?: Build|\) AppleWebKit)'
|
2265
2480
|
regex_flag: 'i'
|
2266
2481
|
device_replacement: '$1$2'
|
2267
2482
|
brand_replacement: 'Cube'
|
@@ -2271,12 +2486,12 @@ device_parsers:
|
|
2271
2486
|
# Cubot
|
2272
2487
|
# @ref: http://www.cubotmall.com/
|
2273
2488
|
#########
|
2274
|
-
- regex: ';
|
2489
|
+
- regex: '; {0,2}CUBOT ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2275
2490
|
regex_flag: 'i'
|
2276
2491
|
device_replacement: '$1'
|
2277
2492
|
brand_replacement: 'Cubot'
|
2278
2493
|
model_replacement: '$1'
|
2279
|
-
- regex: ';
|
2494
|
+
- regex: '; {0,2}(BOBBY)(?: Build|\) AppleWebKit)'
|
2280
2495
|
regex_flag: 'i'
|
2281
2496
|
device_replacement: '$1'
|
2282
2497
|
brand_replacement: 'Cubot'
|
@@ -2286,7 +2501,7 @@ device_parsers:
|
|
2286
2501
|
# Danew
|
2287
2502
|
# @ref: http://www.danew.com/produits-tablette.php
|
2288
2503
|
#########
|
2289
|
-
- regex: ';
|
2504
|
+
- regex: '; {0,2}(Dslide [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2290
2505
|
device_replacement: '$1'
|
2291
2506
|
brand_replacement: 'Danew'
|
2292
2507
|
model_replacement: '$1'
|
@@ -2300,39 +2515,35 @@ device_parsers:
|
|
2300
2515
|
# @ref: http://www.dell.com/in/p/mobile-xcd28/pd
|
2301
2516
|
# @ref: http://www.dell.com/in/p/mobile-xcd35/pd
|
2302
2517
|
#########
|
2303
|
-
- regex: ';
|
2518
|
+
- regex: '; {0,2}(XCD)[ _]?(28|35)(?: Build|\) AppleWebKit)'
|
2304
2519
|
device_replacement: 'Dell $1$2'
|
2305
2520
|
brand_replacement: 'Dell'
|
2306
2521
|
model_replacement: '$1$2'
|
2307
|
-
- regex: ';
|
2522
|
+
- regex: '; {0,2}(001DL)(?: Build|\) AppleWebKit)'
|
2308
2523
|
device_replacement: 'Dell $1'
|
2309
2524
|
brand_replacement: 'Dell'
|
2310
2525
|
model_replacement: 'Streak'
|
2311
|
-
- regex: ';
|
2526
|
+
- regex: '; {0,2}(?:Dell|DELL) (Streak)(?: Build|\) AppleWebKit)'
|
2312
2527
|
device_replacement: 'Dell $1'
|
2313
2528
|
brand_replacement: 'Dell'
|
2314
2529
|
model_replacement: 'Streak'
|
2315
|
-
- regex: ';
|
2530
|
+
- regex: '; {0,2}(101DL|GS01|Streak Pro[^;/]{0,100})(?: Build|\) AppleWebKit)'
|
2316
2531
|
device_replacement: 'Dell $1'
|
2317
2532
|
brand_replacement: 'Dell'
|
2318
2533
|
model_replacement: 'Streak Pro'
|
2319
|
-
- regex: ';
|
2534
|
+
- regex: '; {0,2}([Ss]treak ?7)(?: Build|\) AppleWebKit)'
|
2320
2535
|
device_replacement: 'Dell $1'
|
2321
2536
|
brand_replacement: 'Dell'
|
2322
2537
|
model_replacement: 'Streak 7'
|
2323
|
-
- regex: ';
|
2324
|
-
device_replacement: 'Dell $1'
|
2325
|
-
brand_replacement: 'Dell'
|
2326
|
-
model_replacement: '$1'
|
2327
|
-
- regex: '; *(?:Dell|DELL)[ _](Aero|Venue|Thunder|Mini.*?|Streak[ _]Pro)(?: Build|\) AppleWebKit)'
|
2538
|
+
- regex: '; {0,2}(Mini-3iX)(?: Build|\) AppleWebKit)'
|
2328
2539
|
device_replacement: 'Dell $1'
|
2329
2540
|
brand_replacement: 'Dell'
|
2330
2541
|
model_replacement: '$1'
|
2331
|
-
- regex: ';
|
2542
|
+
- regex: '; {0,2}(?:Dell|DELL)[ _](Aero|Venue|Thunder|Mini.{0,200}?|Streak[ _]Pro)(?: Build|\) AppleWebKit)'
|
2332
2543
|
device_replacement: 'Dell $1'
|
2333
2544
|
brand_replacement: 'Dell'
|
2334
2545
|
model_replacement: '$1'
|
2335
|
-
- regex: ';
|
2546
|
+
- regex: '; {0,2}Dell[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2336
2547
|
device_replacement: 'Dell $1'
|
2337
2548
|
brand_replacement: 'Dell'
|
2338
2549
|
model_replacement: '$1'
|
@@ -2341,7 +2552,7 @@ device_parsers:
|
|
2341
2552
|
# Denver
|
2342
2553
|
# @ref: http://www.denver-electronics.com/tablets1/
|
2343
2554
|
#########
|
2344
|
-
- regex: ';
|
2555
|
+
- regex: '; {0,2}(TA[CD]-\d+[^;/]{0,100})(?: Build|\) AppleWebKit)'
|
2345
2556
|
device_replacement: '$1'
|
2346
2557
|
brand_replacement: 'Denver'
|
2347
2558
|
model_replacement: '$1'
|
@@ -2350,7 +2561,7 @@ device_parsers:
|
|
2350
2561
|
# Dex
|
2351
2562
|
# @ref: http://dex.ua/
|
2352
2563
|
#########
|
2353
|
-
- regex: ';
|
2564
|
+
- regex: '; {0,2}(iP[789]\d{2}(?:-3G)?|IP10\d{2}(?:-8GB)?)(?: Build|\) AppleWebKit)'
|
2354
2565
|
device_replacement: '$1'
|
2355
2566
|
brand_replacement: 'Dex'
|
2356
2567
|
model_replacement: '$1'
|
@@ -2359,7 +2570,7 @@ device_parsers:
|
|
2359
2570
|
# DNS AirTab
|
2360
2571
|
# @ref: http://www.dns-shop.ru/
|
2361
2572
|
#########
|
2362
|
-
- regex: ';
|
2573
|
+
- regex: '; {0,2}(AirTab)[ _\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2363
2574
|
device_replacement: '$1 $2'
|
2364
2575
|
brand_replacement: 'DNS'
|
2365
2576
|
model_replacement: '$1 $2'
|
@@ -2368,43 +2579,43 @@ device_parsers:
|
|
2368
2579
|
# Docomo (Operator Branded Device)
|
2369
2580
|
# @ref: http://www.ipentec.com/document/document.aspx?page=android-useragent
|
2370
2581
|
#########
|
2371
|
-
- regex: ';
|
2582
|
+
- regex: '; {0,2}(F\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2372
2583
|
device_replacement: '$1'
|
2373
2584
|
brand_replacement: 'Fujitsu'
|
2374
2585
|
model_replacement: '$1'
|
2375
|
-
- regex: ';
|
2586
|
+
- regex: '; {0,2}(HT-03A)(?: Build|\) AppleWebKit)'
|
2376
2587
|
device_replacement: '$1'
|
2377
2588
|
brand_replacement: 'HTC'
|
2378
2589
|
model_replacement: 'Magic'
|
2379
|
-
- regex: ';
|
2590
|
+
- regex: '; {0,2}(HT\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2380
2591
|
device_replacement: '$1'
|
2381
2592
|
brand_replacement: 'HTC'
|
2382
2593
|
model_replacement: '$1'
|
2383
|
-
- regex: ';
|
2594
|
+
- regex: '; {0,2}(L\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2384
2595
|
device_replacement: '$1'
|
2385
2596
|
brand_replacement: 'LG'
|
2386
2597
|
model_replacement: '$1'
|
2387
|
-
- regex: ';
|
2598
|
+
- regex: '; {0,2}(N\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2388
2599
|
device_replacement: '$1'
|
2389
2600
|
brand_replacement: 'Nec'
|
2390
2601
|
model_replacement: '$1'
|
2391
|
-
- regex: ';
|
2602
|
+
- regex: '; {0,2}(P\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2392
2603
|
device_replacement: '$1'
|
2393
2604
|
brand_replacement: 'Panasonic'
|
2394
2605
|
model_replacement: '$1'
|
2395
|
-
- regex: ';
|
2606
|
+
- regex: '; {0,2}(SC\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2396
2607
|
device_replacement: '$1'
|
2397
2608
|
brand_replacement: 'Samsung'
|
2398
2609
|
model_replacement: '$1'
|
2399
|
-
- regex: ';
|
2610
|
+
- regex: '; {0,2}(SH\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2400
2611
|
device_replacement: '$1'
|
2401
2612
|
brand_replacement: 'Sharp'
|
2402
2613
|
model_replacement: '$1'
|
2403
|
-
- regex: ';
|
2614
|
+
- regex: '; {0,2}(SO\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2404
2615
|
device_replacement: '$1'
|
2405
2616
|
brand_replacement: 'SonyEricsson'
|
2406
2617
|
model_replacement: '$1'
|
2407
|
-
- regex: ';
|
2618
|
+
- regex: '; {0,2}(T\-0[12][^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2408
2619
|
device_replacement: '$1'
|
2409
2620
|
brand_replacement: 'Toshiba'
|
2410
2621
|
model_replacement: '$1'
|
@@ -2413,7 +2624,7 @@ device_parsers:
|
|
2413
2624
|
# DOOV
|
2414
2625
|
# @ref: http://www.doov.com.cn/
|
2415
2626
|
#########
|
2416
|
-
- regex: ';
|
2627
|
+
- regex: '; {0,2}(DOOV)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2417
2628
|
device_replacement: '$1 $2'
|
2418
2629
|
brand_replacement: 'DOOV'
|
2419
2630
|
model_replacement: '$2'
|
@@ -2422,7 +2633,7 @@ device_parsers:
|
|
2422
2633
|
# Enot
|
2423
2634
|
# @ref: http://www.enot.ua/
|
2424
2635
|
#########
|
2425
|
-
- regex: ';
|
2636
|
+
- regex: '; {0,2}(Enot|ENOT)[ -]?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2426
2637
|
device_replacement: '$1 $2'
|
2427
2638
|
brand_replacement: 'Enot'
|
2428
2639
|
model_replacement: '$2'
|
@@ -2431,11 +2642,11 @@ device_parsers:
|
|
2431
2642
|
# Evercoss
|
2432
2643
|
# @ref: http://evercoss.com/android/
|
2433
2644
|
#########
|
2434
|
-
- regex: ';
|
2645
|
+
- regex: '; {0,2}[^;/]{1,100} Build/(?:CROSS|Cross)+[ _\-]([^\)]+)'
|
2435
2646
|
device_replacement: 'CROSS $1'
|
2436
2647
|
brand_replacement: 'Evercoss'
|
2437
2648
|
model_replacement: 'Cross $1'
|
2438
|
-
- regex: ';
|
2649
|
+
- regex: '; {0,2}(CROSS|Cross)[ _\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2439
2650
|
device_replacement: '$1 $2'
|
2440
2651
|
brand_replacement: 'Evercoss'
|
2441
2652
|
model_replacement: 'Cross $2'
|
@@ -2444,7 +2655,7 @@ device_parsers:
|
|
2444
2655
|
# Explay
|
2445
2656
|
# @ref: http://explay.ru/
|
2446
2657
|
#########
|
2447
|
-
- regex: ';
|
2658
|
+
- regex: '; {0,2}Explay[_ ](.{1,200}?)(?:[\)]| Build)'
|
2448
2659
|
device_replacement: '$1'
|
2449
2660
|
brand_replacement: 'Explay'
|
2450
2661
|
model_replacement: '$1'
|
@@ -2453,11 +2664,11 @@ device_parsers:
|
|
2453
2664
|
# Fly
|
2454
2665
|
# @ref: http://www.fly-phone.com/
|
2455
2666
|
#########
|
2456
|
-
- regex: ';
|
2667
|
+
- regex: '; {0,2}(IQ.{0,200}?)(?: Build|\) AppleWebKit)'
|
2457
2668
|
device_replacement: '$1'
|
2458
2669
|
brand_replacement: 'Fly'
|
2459
2670
|
model_replacement: '$1'
|
2460
|
-
- regex: ';
|
2671
|
+
- regex: '; {0,2}(Fly|FLY)[ _](IQ[^;]{1,100}?|F[34]\d+[^;]{0,100}?);?(?: Build|\) AppleWebKit)'
|
2461
2672
|
device_replacement: '$1 $2'
|
2462
2673
|
brand_replacement: 'Fly'
|
2463
2674
|
model_replacement: '$2'
|
@@ -2466,7 +2677,7 @@ device_parsers:
|
|
2466
2677
|
# Fujitsu
|
2467
2678
|
# @ref: http://www.fujitsu.com/global/
|
2468
2679
|
#########
|
2469
|
-
- regex: ';
|
2680
|
+
- regex: '; {0,2}(M532|Q572|FJL21)(?: Build|\) AppleWebKit)'
|
2470
2681
|
device_replacement: '$1'
|
2471
2682
|
brand_replacement: 'Fujitsu'
|
2472
2683
|
model_replacement: '$1'
|
@@ -2475,7 +2686,7 @@ device_parsers:
|
|
2475
2686
|
# Galapad
|
2476
2687
|
# @ref: http://www.galapad.net/product.html
|
2477
2688
|
#########
|
2478
|
-
- regex: ';
|
2689
|
+
- regex: '; {0,2}(G1)(?: Build|\) AppleWebKit)'
|
2479
2690
|
device_replacement: '$1'
|
2480
2691
|
brand_replacement: 'Galapad'
|
2481
2692
|
model_replacement: '$1'
|
@@ -2484,7 +2695,7 @@ device_parsers:
|
|
2484
2695
|
# Geeksphone
|
2485
2696
|
# @ref: http://www.geeksphone.com/
|
2486
2697
|
#########
|
2487
|
-
- regex: ';
|
2698
|
+
- regex: '; {0,2}(Geeksphone) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2488
2699
|
device_replacement: '$1 $2'
|
2489
2700
|
brand_replacement: '$1'
|
2490
2701
|
model_replacement: '$2'
|
@@ -2493,8 +2704,7 @@ device_parsers:
|
|
2493
2704
|
# Gfive
|
2494
2705
|
# @ref: http://www.gfivemobile.com/en
|
2495
2706
|
#########
|
2496
|
-
|
2497
|
-
- regex: '; *(G[^F]?FIVE) ([^;/]+?)(?: Build|\) AppleWebKit)'
|
2707
|
+
- regex: '; {0,2}(G[^F]?FIVE) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2498
2708
|
device_replacement: '$1 $2'
|
2499
2709
|
brand_replacement: 'Gfive'
|
2500
2710
|
model_replacement: '$2'
|
@@ -2503,16 +2713,16 @@ device_parsers:
|
|
2503
2713
|
# Gionee
|
2504
2714
|
# @ref: http://www.gionee.com/
|
2505
2715
|
#########
|
2506
|
-
- regex: ';
|
2716
|
+
- regex: '; {0,2}(Gionee)[ _\-]([^;/]{1,100}?)(?:/[^;/]{1,100}|)(?: Build|\) AppleWebKit)'
|
2507
2717
|
regex_flag: 'i'
|
2508
2718
|
device_replacement: '$1 $2'
|
2509
2719
|
brand_replacement: 'Gionee'
|
2510
2720
|
model_replacement: '$2'
|
2511
|
-
- regex: ';
|
2721
|
+
- regex: '; {0,2}(GN\d+[A-Z]?|INFINITY_PASSION|Ctrl_V1)(?: Build|\) AppleWebKit)'
|
2512
2722
|
device_replacement: 'Gionee $1'
|
2513
2723
|
brand_replacement: 'Gionee'
|
2514
2724
|
model_replacement: '$1'
|
2515
|
-
- regex: ';
|
2725
|
+
- regex: '; {0,2}(E3) Build/JOP40D'
|
2516
2726
|
device_replacement: 'Gionee $1'
|
2517
2727
|
brand_replacement: 'Gionee'
|
2518
2728
|
model_replacement: '$1'
|
@@ -2526,11 +2736,11 @@ device_parsers:
|
|
2526
2736
|
# GoClever
|
2527
2737
|
# @ref: http://www.goclever.com
|
2528
2738
|
#########
|
2529
|
-
- regex: ';
|
2739
|
+
- regex: '; {0,2}((?:FONE|QUANTUM|INSIGNIA) \d+[^;/]{0,100}|PLAYTAB)(?: Build|\) AppleWebKit)'
|
2530
2740
|
device_replacement: 'GoClever $1'
|
2531
2741
|
brand_replacement: 'GoClever'
|
2532
2742
|
model_replacement: '$1'
|
2533
|
-
- regex: ';
|
2743
|
+
- regex: '; {0,2}GOCLEVER ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2534
2744
|
device_replacement: 'GoClever $1'
|
2535
2745
|
brand_replacement: 'GoClever'
|
2536
2746
|
model_replacement: '$1'
|
@@ -2539,20 +2749,24 @@ device_parsers:
|
|
2539
2749
|
# Google
|
2540
2750
|
# @ref: http://www.google.de/glass/start/
|
2541
2751
|
#########
|
2542
|
-
- regex: ';
|
2752
|
+
- regex: '; {0,2}(Glass \d+)(?: Build|\) AppleWebKit)'
|
2543
2753
|
device_replacement: '$1'
|
2544
2754
|
brand_replacement: 'Google'
|
2545
2755
|
model_replacement: '$1'
|
2546
|
-
- regex: ';
|
2547
|
-
device_replacement: '$
|
2756
|
+
- regex: '; {0,2}([g|G]oogle)? (Pixel[ a-zA-z0-9]{1,100});(?: Build|.{0,50}\) AppleWebKit)'
|
2757
|
+
device_replacement: '$2'
|
2548
2758
|
brand_replacement: 'Google'
|
2549
|
-
model_replacement: '$
|
2759
|
+
model_replacement: '$2'
|
2760
|
+
- regex: '; {0,2}([g|G]oogle)? (Pixel.{0,200}?)(?: Build|\) AppleWebKit)'
|
2761
|
+
device_replacement: '$2'
|
2762
|
+
brand_replacement: 'Google'
|
2763
|
+
model_replacement: '$2'
|
2550
2764
|
|
2551
2765
|
#########
|
2552
2766
|
# Gigabyte
|
2553
2767
|
# @ref: http://gsmart.gigabytecm.com/en/
|
2554
2768
|
#########
|
2555
|
-
- regex: ';
|
2769
|
+
- regex: '; {0,2}(GSmart)[ -]([^/]{1,50})(?: Build|\) AppleWebKit)'
|
2556
2770
|
device_replacement: '$1 $2'
|
2557
2771
|
brand_replacement: 'Gigabyte'
|
2558
2772
|
model_replacement: '$1 $2'
|
@@ -2561,7 +2775,7 @@ device_parsers:
|
|
2561
2775
|
# Freescale development boards
|
2562
2776
|
# @ref: http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=IMX53QSB
|
2563
2777
|
#########
|
2564
|
-
- regex: ';
|
2778
|
+
- regex: '; {0,2}(imx5[13]_[^/]{1,50})(?: Build|\) AppleWebKit)'
|
2565
2779
|
device_replacement: 'Freescale $1'
|
2566
2780
|
brand_replacement: 'Freescale'
|
2567
2781
|
model_replacement: '$1'
|
@@ -2571,11 +2785,11 @@ device_parsers:
|
|
2571
2785
|
# @ref: http://www.haier.com/
|
2572
2786
|
# @ref: http://www.haier.com/de/produkte/tablet/
|
2573
2787
|
#########
|
2574
|
-
- regex: ';
|
2788
|
+
- regex: '; {0,2}Haier[ _\-]([^/]{1,50})(?: Build|\) AppleWebKit)'
|
2575
2789
|
device_replacement: 'Haier $1'
|
2576
2790
|
brand_replacement: 'Haier'
|
2577
2791
|
model_replacement: '$1'
|
2578
|
-
- regex: ';
|
2792
|
+
- regex: '; {0,2}(PAD1016)(?: Build|\) AppleWebKit)'
|
2579
2793
|
device_replacement: 'Haipad $1'
|
2580
2794
|
brand_replacement: 'Haipad'
|
2581
2795
|
model_replacement: '$1'
|
@@ -2585,7 +2799,7 @@ device_parsers:
|
|
2585
2799
|
# @ref: http://www.haipad.net/
|
2586
2800
|
# @models: V7P|M7SM7S|M9XM9X|M7XM7X|M9|M8|M7-M|M1002|M7|M701
|
2587
2801
|
#########
|
2588
|
-
- regex: ';
|
2802
|
+
- regex: '; {0,2}(M701|M7|M8|M9)(?: Build|\) AppleWebKit)'
|
2589
2803
|
device_replacement: 'Haipad $1'
|
2590
2804
|
brand_replacement: 'Haipad'
|
2591
2805
|
model_replacement: '$1'
|
@@ -2595,7 +2809,7 @@ device_parsers:
|
|
2595
2809
|
# @ref: http://www.hannspree.eu/
|
2596
2810
|
# @models: SN10T1|SN10T2|SN70T31B|SN70T32W
|
2597
2811
|
#########
|
2598
|
-
- regex: ';
|
2812
|
+
- regex: '; {0,2}(SN\d+T[^;\)/]*)(?: Build|[;\)])'
|
2599
2813
|
device_replacement: 'Hannspree $1'
|
2600
2814
|
brand_replacement: 'Hannspree'
|
2601
2815
|
model_replacement: '$1'
|
@@ -2604,11 +2818,11 @@ device_parsers:
|
|
2604
2818
|
# HCLme
|
2605
2819
|
# @ref: http://www.hclmetablet.com/india/
|
2606
2820
|
#########
|
2607
|
-
- regex: 'Build/HCL ME Tablet ([^;\)]
|
2821
|
+
- regex: 'Build/HCL ME Tablet ([^;\)]{1,3})[\);]'
|
2608
2822
|
device_replacement: 'HCLme $1'
|
2609
2823
|
brand_replacement: 'HCLme'
|
2610
2824
|
model_replacement: '$1'
|
2611
|
-
- regex: ';
|
2825
|
+
- regex: '; {0,2}([^;\/]+) Build/HCL'
|
2612
2826
|
device_replacement: 'HCLme $1'
|
2613
2827
|
brand_replacement: 'HCLme'
|
2614
2828
|
model_replacement: '$1'
|
@@ -2617,7 +2831,7 @@ device_parsers:
|
|
2617
2831
|
# Hena
|
2618
2832
|
# @ref: http://www.henadigital.com/en/product/index.asp?id=6
|
2619
2833
|
#########
|
2620
|
-
- regex: ';
|
2834
|
+
- regex: '; {0,2}(MID-?\d{4}C[EM])(?: Build|\) AppleWebKit)'
|
2621
2835
|
device_replacement: 'Hena $1'
|
2622
2836
|
brand_replacement: 'Hena'
|
2623
2837
|
model_replacement: '$1'
|
@@ -2626,11 +2840,11 @@ device_parsers:
|
|
2626
2840
|
# Hisense
|
2627
2841
|
# @ref: http://www.hisense.com/
|
2628
2842
|
#########
|
2629
|
-
- regex: ';
|
2843
|
+
- regex: '; {0,2}(EG\d{2,}|HS-[^;/]{1,100}|MIRA[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2630
2844
|
device_replacement: 'Hisense $1'
|
2631
2845
|
brand_replacement: 'Hisense'
|
2632
2846
|
model_replacement: '$1'
|
2633
|
-
- regex: ';
|
2847
|
+
- regex: '; {0,2}(andromax[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2634
2848
|
regex_flag: 'i'
|
2635
2849
|
device_replacement: 'Hisense $1'
|
2636
2850
|
brand_replacement: 'Hisense'
|
@@ -2640,7 +2854,7 @@ device_parsers:
|
|
2640
2854
|
# hitech
|
2641
2855
|
# @ref: http://www.hitech-mobiles.com/
|
2642
2856
|
#########
|
2643
|
-
- regex: ';
|
2857
|
+
- regex: '; {0,2}(?:AMAZE[ _](S\d+)|(S\d+)[ _]AMAZE)(?: Build|\) AppleWebKit)'
|
2644
2858
|
device_replacement: 'AMAZE $1$2'
|
2645
2859
|
brand_replacement: 'hitech'
|
2646
2860
|
model_replacement: 'AMAZE $1$2'
|
@@ -2649,15 +2863,15 @@ device_parsers:
|
|
2649
2863
|
# HP
|
2650
2864
|
# @ref: http://www.hp.com/
|
2651
2865
|
#########
|
2652
|
-
- regex: ';
|
2866
|
+
- regex: '; {0,2}(PlayBook)(?: Build|\) AppleWebKit)'
|
2653
2867
|
device_replacement: 'HP $1'
|
2654
2868
|
brand_replacement: 'HP'
|
2655
2869
|
model_replacement: '$1'
|
2656
|
-
- regex: ';
|
2870
|
+
- regex: '; {0,2}HP ([^/]{1,50})(?: Build|\) AppleWebKit)'
|
2657
2871
|
device_replacement: 'HP $1'
|
2658
2872
|
brand_replacement: 'HP'
|
2659
2873
|
model_replacement: '$1'
|
2660
|
-
- regex: ';
|
2874
|
+
- regex: '; {0,2}([^/]{1,30}_tenderloin)(?: Build|\) AppleWebKit)'
|
2661
2875
|
device_replacement: 'HP TouchPad'
|
2662
2876
|
brand_replacement: 'HP'
|
2663
2877
|
model_replacement: 'TouchPad'
|
@@ -2667,62 +2881,66 @@ device_parsers:
|
|
2667
2881
|
# @ref: http://www.huaweidevice.com
|
2668
2882
|
# @note: Needs to be before HTC due to Desire HD Build on U8815
|
2669
2883
|
#########
|
2670
|
-
- regex: ';
|
2884
|
+
- regex: '; {0,2}(HUAWEI |Huawei-|)([UY][^;/]{1,100}) Build/(?:Huawei|HUAWEI)([UY][^\);]+)\)'
|
2671
2885
|
device_replacement: '$1$2'
|
2672
2886
|
brand_replacement: 'Huawei'
|
2673
2887
|
model_replacement: '$2'
|
2674
|
-
- regex: ';
|
2888
|
+
- regex: '; {0,2}([^;/]{1,100}) Build[/ ]Huawei(MT1-U06|[A-Z]{1,50}\d+[^\);]{1,50})\)'
|
2675
2889
|
device_replacement: '$1'
|
2676
2890
|
brand_replacement: 'Huawei'
|
2677
2891
|
model_replacement: '$2'
|
2678
|
-
- regex: ';
|
2892
|
+
- regex: '; {0,2}(S7|M860) Build'
|
2679
2893
|
device_replacement: '$1'
|
2680
2894
|
brand_replacement: 'Huawei'
|
2681
2895
|
model_replacement: '$1'
|
2682
|
-
- regex: ';
|
2896
|
+
- regex: '; {0,2}((?:HUAWEI|Huawei)[ \-]?)(MediaPad) Build'
|
2683
2897
|
device_replacement: '$1$2'
|
2684
2898
|
brand_replacement: 'Huawei'
|
2685
2899
|
model_replacement: '$2'
|
2686
|
-
- regex: ';
|
2900
|
+
- regex: '; {0,2}((?:HUAWEI[ _]?|Huawei[ _]|)Ascend[ _])([^;/]{1,100}) Build'
|
2687
2901
|
device_replacement: '$1$2'
|
2688
2902
|
brand_replacement: 'Huawei'
|
2689
2903
|
model_replacement: '$2'
|
2690
|
-
- regex: ';
|
2904
|
+
- regex: '; {0,2}((?:HUAWEI|Huawei)[ _\-]?)((?:G700-|MT-)[^;/]{1,100}) Build'
|
2691
2905
|
device_replacement: '$1$2'
|
2692
2906
|
brand_replacement: 'Huawei'
|
2693
2907
|
model_replacement: '$2'
|
2694
|
-
- regex: ';
|
2908
|
+
- regex: '; {0,2}((?:HUAWEI|Huawei)[ _\-]?)([^;/]{1,100}) Build'
|
2695
2909
|
device_replacement: '$1$2'
|
2696
2910
|
brand_replacement: 'Huawei'
|
2697
2911
|
model_replacement: '$2'
|
2698
|
-
- regex: ';
|
2912
|
+
- regex: '; {0,2}(MediaPad[^;]{1,200}|SpringBoard) Build/Huawei'
|
2699
2913
|
device_replacement: '$1'
|
2700
2914
|
brand_replacement: 'Huawei'
|
2701
2915
|
model_replacement: '$1'
|
2702
|
-
- regex: ';
|
2916
|
+
- regex: '; {0,2}([^;]{1,200}) Build/(?:Huawei|HUAWEI)'
|
2703
2917
|
device_replacement: '$1'
|
2704
2918
|
brand_replacement: 'Huawei'
|
2705
2919
|
model_replacement: '$1'
|
2706
|
-
- regex: ';
|
2920
|
+
- regex: '; {0,2}([Uu])([89]\d{3}) Build'
|
2707
2921
|
device_replacement: '$1$2'
|
2708
2922
|
brand_replacement: 'Huawei'
|
2709
2923
|
model_replacement: 'U$2'
|
2710
|
-
- regex: ';
|
2924
|
+
- regex: '; {0,2}(?:Ideos |IDEOS )(S7) Build'
|
2711
2925
|
device_replacement: 'Huawei Ideos$1'
|
2712
2926
|
brand_replacement: 'Huawei'
|
2713
2927
|
model_replacement: 'Ideos$1'
|
2714
|
-
- regex: ';
|
2928
|
+
- regex: '; {0,2}(?:Ideos |IDEOS )([^;/]{1,50}\s{0,5}|\s{0,5})Build'
|
2715
2929
|
device_replacement: 'Huawei Ideos$1'
|
2716
2930
|
brand_replacement: 'Huawei'
|
2717
2931
|
model_replacement: 'Ideos$1'
|
2718
|
-
- regex: ';
|
2932
|
+
- regex: '; {0,2}(Orange Daytona|Pulse|Pulse Mini|Vodafone 858|C8500|C8600|C8650|C8660|Nexus 6P|ATH-.{1,200}?) Build[/ ]'
|
2719
2933
|
device_replacement: 'Huawei $1'
|
2720
2934
|
brand_replacement: 'Huawei'
|
2721
2935
|
model_replacement: '$1'
|
2722
|
-
- regex: ';
|
2936
|
+
- regex: '; {0,2}((?:[A-Z]{3})\-L[A-Za0-9]{2})[\)]'
|
2723
2937
|
device_replacement: 'Huawei $1'
|
2724
2938
|
brand_replacement: 'Huawei'
|
2725
2939
|
model_replacement: '$1'
|
2940
|
+
- regex: '; {0,2}([^;]{1,200}) Build/(HONOR|Honor)'
|
2941
|
+
device_replacement: 'Huawei Honor $1'
|
2942
|
+
brand_replacement: 'Huawei'
|
2943
|
+
model_replacement: 'Honor $1'
|
2726
2944
|
|
2727
2945
|
#########
|
2728
2946
|
# HTC
|
@@ -2730,7 +2948,7 @@ device_parsers:
|
|
2730
2948
|
# @ref: http://en.wikipedia.org/wiki/List_of_HTC_phones
|
2731
2949
|
#########
|
2732
2950
|
|
2733
|
-
- regex: ';
|
2951
|
+
- regex: '; {0,2}HTC[ _]([^;]{1,200}); Windows Phone'
|
2734
2952
|
device_replacement: 'HTC $1'
|
2735
2953
|
brand_replacement: 'HTC'
|
2736
2954
|
model_replacement: '$1'
|
@@ -2738,59 +2956,59 @@ device_parsers:
|
|
2738
2956
|
# Android HTC with Version Number matcher
|
2739
2957
|
# ; HTC_0P3Z11/1.12.161.3 Build
|
2740
2958
|
# ;HTC_A3335 V2.38.841.1 Build
|
2741
|
-
- regex: ';
|
2959
|
+
- regex: '; {0,2}(?:HTC[ _/])+([^ _/]+)(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: {0,2}Build|\))'
|
2742
2960
|
device_replacement: 'HTC $1'
|
2743
2961
|
brand_replacement: 'HTC'
|
2744
2962
|
model_replacement: '$1'
|
2745
|
-
- regex: ';
|
2963
|
+
- regex: '; {0,2}(?:HTC[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)|)(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: {0,2}Build|\))'
|
2746
2964
|
device_replacement: 'HTC $1 $2'
|
2747
2965
|
brand_replacement: 'HTC'
|
2748
2966
|
model_replacement: '$1 $2'
|
2749
|
-
- regex: ';
|
2967
|
+
- regex: '; {0,2}(?:HTC[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)|)|)(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: {0,2}Build|\))'
|
2750
2968
|
device_replacement: 'HTC $1 $2 $3'
|
2751
2969
|
brand_replacement: 'HTC'
|
2752
2970
|
model_replacement: '$1 $2 $3'
|
2753
|
-
- regex: ';
|
2971
|
+
- regex: '; {0,2}(?:HTC[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)|)|)|)(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: {0,2}Build|\))'
|
2754
2972
|
device_replacement: 'HTC $1 $2 $3 $4'
|
2755
2973
|
brand_replacement: 'HTC'
|
2756
2974
|
model_replacement: '$1 $2 $3 $4'
|
2757
2975
|
|
2758
2976
|
# Android HTC without Version Number matcher
|
2759
|
-
- regex: ';
|
2977
|
+
- regex: '; {0,2}(?:(?:HTC|htc)(?:_blocked|)[ _/])+([^ _/;]+)(?: {0,2}Build|[;\)]| - )'
|
2760
2978
|
device_replacement: 'HTC $1'
|
2761
2979
|
brand_replacement: 'HTC'
|
2762
2980
|
model_replacement: '$1'
|
2763
|
-
- regex: ';
|
2981
|
+
- regex: '; {0,2}(?:(?:HTC|htc)(?:_blocked|)[ _/])+([^ _/]+)(?:[ _/]([^ _/;\)]+)|)(?: {0,2}Build|[;\)]| - )'
|
2764
2982
|
device_replacement: 'HTC $1 $2'
|
2765
2983
|
brand_replacement: 'HTC'
|
2766
2984
|
model_replacement: '$1 $2'
|
2767
|
-
- regex: ';
|
2985
|
+
- regex: '; {0,2}(?:(?:HTC|htc)(?:_blocked|)[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/;\)]+)|)|)(?: {0,2}Build|[;\)]| - )'
|
2768
2986
|
device_replacement: 'HTC $1 $2 $3'
|
2769
2987
|
brand_replacement: 'HTC'
|
2770
2988
|
model_replacement: '$1 $2 $3'
|
2771
|
-
- regex: ';
|
2989
|
+
- regex: '; {0,2}(?:(?:HTC|htc)(?:_blocked|)[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ /;]+)|)|)|)(?: {0,2}Build|[;\)]| - )'
|
2772
2990
|
device_replacement: 'HTC $1 $2 $3 $4'
|
2773
2991
|
brand_replacement: 'HTC'
|
2774
2992
|
model_replacement: '$1 $2 $3 $4'
|
2775
2993
|
|
2776
2994
|
# HTC Streaming Player
|
2777
|
-
- regex: 'HTC Streaming Player [^\/]
|
2995
|
+
- regex: 'HTC Streaming Player [^\/]{0,30}/[^\/]{0,10}/ htc_([^/]{1,10}) /'
|
2778
2996
|
device_replacement: 'HTC $1'
|
2779
2997
|
brand_replacement: 'HTC'
|
2780
2998
|
model_replacement: '$1'
|
2781
2999
|
# general matcher for anything else
|
2782
|
-
- regex: '(?:[;,]
|
3000
|
+
- regex: '(?:[;,] {0,2}|^)(?:htccn_chs-|)HTC[ _-]?([^;]{1,200}?)(?: {0,2}Build|clay|Android|-?Mozilla| Opera| Profile| UNTRUSTED|[;/\(\)]|$)'
|
2783
3001
|
regex_flag: 'i'
|
2784
3002
|
device_replacement: 'HTC $1'
|
2785
3003
|
brand_replacement: 'HTC'
|
2786
3004
|
model_replacement: '$1'
|
2787
3005
|
# Android matchers without HTC
|
2788
|
-
- regex: ';
|
3006
|
+
- regex: '; {0,2}(A6277|ADR6200|ADR6300|ADR6350|ADR6400[A-Z]*|ADR6425[A-Z]*|APX515CKT|ARIA|Desire[^_ ]*|Dream|EndeavorU|Eris|Evo|Flyer|HD2|Hero|HERO200|Hero CDMA|HTL21|Incredible|Inspire[A-Z0-9]*|Legend|Liberty|Nexus ?(?:One|HD2)|One|One S C2|One[ _]?(?:S|V|X\+?)\w*|PC36100|PG06100|PG86100|S31HT|Sensation|Wildfire)(?: Build|[/;\(\)])'
|
2789
3007
|
regex_flag: 'i'
|
2790
3008
|
device_replacement: 'HTC $1'
|
2791
3009
|
brand_replacement: 'HTC'
|
2792
3010
|
model_replacement: '$1'
|
2793
|
-
- regex: ';
|
3011
|
+
- regex: '; {0,2}(ADR6200|ADR6400L|ADR6425LVW|Amaze|DesireS?|EndeavorU|Eris|EVO|Evo\d[A-Z]+|HD2|IncredibleS?|Inspire[A-Z0-9]*|Inspire[A-Z0-9]*|Sensation[A-Z0-9]*|Wildfire)[ _-](.{1,200}?)(?:[/;\)]|Build|MIUI|1\.0)'
|
2794
3012
|
regex_flag: 'i'
|
2795
3013
|
device_replacement: 'HTC $1 $2'
|
2796
3014
|
brand_replacement: 'HTC'
|
@@ -2800,16 +3018,16 @@ device_parsers:
|
|
2800
3018
|
# Hyundai
|
2801
3019
|
# @ref: http://www.hyundaitechnologies.com
|
2802
3020
|
#########
|
2803
|
-
- regex: ';
|
3021
|
+
- regex: '; {0,2}HYUNDAI (T\d[^/]{0,10})(?: Build|\) AppleWebKit)'
|
2804
3022
|
device_replacement: 'Hyundai $1'
|
2805
3023
|
brand_replacement: 'Hyundai'
|
2806
3024
|
model_replacement: '$1'
|
2807
|
-
- regex: ';
|
3025
|
+
- regex: '; {0,2}HYUNDAI ([^;/]{1,10}?)(?: Build|\) AppleWebKit)'
|
2808
3026
|
device_replacement: 'Hyundai $1'
|
2809
3027
|
brand_replacement: 'Hyundai'
|
2810
3028
|
model_replacement: '$1'
|
2811
3029
|
# X900? http://www.amazon.com/Hyundai-X900-Retina-Android-Bluetooth/dp/B00AO07H3O
|
2812
|
-
- regex: ';
|
3030
|
+
- regex: '; {0,2}(X700|Hold X|MB-6900)(?: Build|\) AppleWebKit)'
|
2813
3031
|
device_replacement: 'Hyundai $1'
|
2814
3032
|
brand_replacement: 'Hyundai'
|
2815
3033
|
model_replacement: '$1'
|
@@ -2818,12 +3036,12 @@ device_parsers:
|
|
2818
3036
|
# iBall
|
2819
3037
|
# @ref: http://www.iball.co.in/Category/Mobiles/22
|
2820
3038
|
#########
|
2821
|
-
- regex: ';
|
3039
|
+
- regex: '; {0,2}(?:iBall[ _\-]|)(Andi)[ _]?(\d[^;/]*)(?: Build|\) AppleWebKit)'
|
2822
3040
|
regex_flag: 'i'
|
2823
3041
|
device_replacement: '$1 $2'
|
2824
3042
|
brand_replacement: 'iBall'
|
2825
3043
|
model_replacement: '$1 $2'
|
2826
|
-
- regex: ';
|
3044
|
+
- regex: '; {0,2}(IBall)(?:[ _]([^;/]{1,100}?)|)(?: Build|\) AppleWebKit)'
|
2827
3045
|
regex_flag: 'i'
|
2828
3046
|
device_replacement: '$1 $2'
|
2829
3047
|
brand_replacement: 'iBall'
|
@@ -2833,7 +3051,7 @@ device_parsers:
|
|
2833
3051
|
# IconBIT
|
2834
3052
|
# @ref: http://www.iconbit.com/catalog/tablets/
|
2835
3053
|
#########
|
2836
|
-
- regex: ';
|
3054
|
+
- regex: '; {0,2}(NT-\d+[^ ;/]{0,50}|Net[Tt]AB [^;/]{1,50}|Mercury [A-Z]{1,50}|iconBIT)(?: S/N:[^;/]{1,50}|)(?: Build|\) AppleWebKit)'
|
2837
3055
|
device_replacement: '$1'
|
2838
3056
|
brand_replacement: 'IconBIT'
|
2839
3057
|
model_replacement: '$1'
|
@@ -2842,7 +3060,7 @@ device_parsers:
|
|
2842
3060
|
# IMO
|
2843
3061
|
# @ref: http://www.ponselimo.com/
|
2844
3062
|
#########
|
2845
|
-
- regex: ';
|
3063
|
+
- regex: '; {0,2}(IMO)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2846
3064
|
regex_flag: 'i'
|
2847
3065
|
device_replacement: '$1 $2'
|
2848
3066
|
brand_replacement: 'IMO'
|
@@ -2852,12 +3070,12 @@ device_parsers:
|
|
2852
3070
|
# i-mobile
|
2853
3071
|
# @ref: http://www.i-mobilephone.com/
|
2854
3072
|
#########
|
2855
|
-
- regex: ';
|
3073
|
+
- regex: '; {0,2}i-?mobile[ _]([^/]{1,50})(?: Build|\) AppleWebKit)'
|
2856
3074
|
regex_flag: 'i'
|
2857
3075
|
device_replacement: 'i-mobile $1'
|
2858
3076
|
brand_replacement: 'imobile'
|
2859
3077
|
model_replacement: '$1'
|
2860
|
-
- regex: ';
|
3078
|
+
- regex: '; {0,2}(i-(?:style|note)[^/]{0,10})(?: Build|\) AppleWebKit)'
|
2861
3079
|
regex_flag: 'i'
|
2862
3080
|
device_replacement: 'i-mobile $1'
|
2863
3081
|
brand_replacement: 'imobile'
|
@@ -2867,7 +3085,7 @@ device_parsers:
|
|
2867
3085
|
# Impression
|
2868
3086
|
# @ref: http://impression.ua/planshetnye-kompyutery
|
2869
3087
|
#########
|
2870
|
-
- regex: ';
|
3088
|
+
- regex: '; {0,2}(ImPAD) ?(\d+(?:.){0,100}?)(?: Build|\) AppleWebKit)'
|
2871
3089
|
device_replacement: '$1 $2'
|
2872
3090
|
brand_replacement: 'Impression'
|
2873
3091
|
model_replacement: '$1 $2'
|
@@ -2876,7 +3094,7 @@ device_parsers:
|
|
2876
3094
|
# Infinix
|
2877
3095
|
# @ref: http://www.infinixmobility.com/index.html
|
2878
3096
|
#########
|
2879
|
-
- regex: ';
|
3097
|
+
- regex: '; {0,2}(Infinix)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2880
3098
|
device_replacement: '$1 $2'
|
2881
3099
|
brand_replacement: 'Infinix'
|
2882
3100
|
model_replacement: '$2'
|
@@ -2885,7 +3103,7 @@ device_parsers:
|
|
2885
3103
|
# Informer
|
2886
3104
|
# @ref: ??
|
2887
3105
|
#########
|
2888
|
-
- regex: ';
|
3106
|
+
- regex: '; {0,2}(Informer)[ \-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2889
3107
|
device_replacement: '$1 $2'
|
2890
3108
|
brand_replacement: 'Informer'
|
2891
3109
|
model_replacement: '$2'
|
@@ -2895,7 +3113,7 @@ device_parsers:
|
|
2895
3113
|
# @ref: http://www.intenso.de
|
2896
3114
|
# @models: 7":TAB 714,TAB 724;8":TAB 814,TAB 824;10":TAB 1004
|
2897
3115
|
#########
|
2898
|
-
- regex: ';
|
3116
|
+
- regex: '; {0,2}(TAB) ?([78][12]4)(?: Build|\) AppleWebKit)'
|
2899
3117
|
device_replacement: 'Intenso $1'
|
2900
3118
|
brand_replacement: 'Intenso'
|
2901
3119
|
model_replacement: '$1 $2'
|
@@ -2906,21 +3124,21 @@ device_parsers:
|
|
2906
3124
|
# @note: Zync also offers a "Cloud Z5" device
|
2907
3125
|
#########
|
2908
3126
|
# smartphones
|
2909
|
-
- regex: ';
|
3127
|
+
- regex: '; {0,2}(?:Intex[ _]|)(AQUA|Aqua)([ _\.\-])([^;/]{1,100}?) {0,2}(?:Build|;)'
|
2910
3128
|
device_replacement: '$1$2$3'
|
2911
3129
|
brand_replacement: 'Intex'
|
2912
3130
|
model_replacement: '$1 $3'
|
2913
3131
|
# matches "INTEX CLOUD X1"
|
2914
|
-
- regex: ';
|
3132
|
+
- regex: '; {0,2}(?:INTEX|Intex)(?:[_ ]([^\ _;/]+))(?:[_ ]([^\ _;/]+)|) {0,2}(?:Build|;)'
|
2915
3133
|
device_replacement: '$1 $2'
|
2916
3134
|
brand_replacement: 'Intex'
|
2917
3135
|
model_replacement: '$1 $2'
|
2918
3136
|
# tablets
|
2919
|
-
- regex: ';
|
3137
|
+
- regex: '; {0,2}([iI]Buddy)[ _]?(Connect)(?:_|\?_| |)([^;/]{0,50}) {0,2}(?:Build|;)'
|
2920
3138
|
device_replacement: '$1 $2 $3'
|
2921
3139
|
brand_replacement: 'Intex'
|
2922
3140
|
model_replacement: 'iBuddy $2 $3'
|
2923
|
-
- regex: ';
|
3141
|
+
- regex: '; {0,2}(I-Buddy)[ _]([^;/]{1,100}?) {0,2}(?:Build|;)'
|
2924
3142
|
device_replacement: '$1 $2'
|
2925
3143
|
brand_replacement: 'Intex'
|
2926
3144
|
model_replacement: 'iBuddy $2'
|
@@ -2929,7 +3147,7 @@ device_parsers:
|
|
2929
3147
|
# iOCEAN
|
2930
3148
|
# @ref: http://www.iocean.cc/
|
2931
3149
|
#########
|
2932
|
-
- regex: ';
|
3150
|
+
- regex: '; {0,2}(iOCEAN) ([^/]{1,50})(?: Build|\) AppleWebKit)'
|
2933
3151
|
regex_flag: 'i'
|
2934
3152
|
device_replacement: '$1 $2'
|
2935
3153
|
brand_replacement: 'iOCEAN'
|
@@ -2939,7 +3157,7 @@ device_parsers:
|
|
2939
3157
|
# i.onik
|
2940
3158
|
# @ref: http://www.i-onik.de/
|
2941
3159
|
#########
|
2942
|
-
- regex: ';
|
3160
|
+
- regex: '; {0,2}(TP\d+(?:\.\d+|)\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2943
3161
|
device_replacement: 'ionik $1'
|
2944
3162
|
brand_replacement: 'ionik'
|
2945
3163
|
model_replacement: '$1'
|
@@ -2948,7 +3166,7 @@ device_parsers:
|
|
2948
3166
|
# IRU.ru
|
2949
3167
|
# @ref: http://www.iru.ru/catalog/soho/planetable/
|
2950
3168
|
#########
|
2951
|
-
- regex: ';
|
3169
|
+
- regex: '; {0,2}(M702pro)(?: Build|\) AppleWebKit)'
|
2952
3170
|
device_replacement: '$1'
|
2953
3171
|
brand_replacement: 'Iru'
|
2954
3172
|
model_replacement: '$1'
|
@@ -2957,7 +3175,7 @@ device_parsers:
|
|
2957
3175
|
# Itel Mobile
|
2958
3176
|
# @ref: https://www.itel-mobile.com/global/products/
|
2959
3177
|
#########
|
2960
|
-
- regex: ';
|
3178
|
+
- regex: '; {0,2}itel ([^;/]*)(?: Build|\) AppleWebKit)'
|
2961
3179
|
device_replacement: 'Itel $1'
|
2962
3180
|
brand_replacement: 'Itel'
|
2963
3181
|
model_replacement: '$1'
|
@@ -2967,11 +3185,11 @@ device_parsers:
|
|
2967
3185
|
# @ref: http://www.ivio.com/mobile.php
|
2968
3186
|
# @models: DG80,DG20,DE38,DE88,MD70
|
2969
3187
|
#########
|
2970
|
-
- regex: ';
|
3188
|
+
- regex: '; {0,2}(DE88Plus|MD70)(?: Build|\) AppleWebKit)'
|
2971
3189
|
device_replacement: '$1'
|
2972
3190
|
brand_replacement: 'Ivio'
|
2973
3191
|
model_replacement: '$1'
|
2974
|
-
- regex: ';
|
3192
|
+
- regex: '; {0,2}IVIO[_\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2975
3193
|
device_replacement: '$1'
|
2976
3194
|
brand_replacement: 'Ivio'
|
2977
3195
|
model_replacement: '$1'
|
@@ -2980,7 +3198,7 @@ device_parsers:
|
|
2980
3198
|
# Jaytech
|
2981
3199
|
# @ref: http://www.jay-tech.de/jaytech/servlet/frontend/
|
2982
3200
|
#########
|
2983
|
-
- regex: ';
|
3201
|
+
- regex: '; {0,2}(TPC-\d+|JAY-TECH)(?: Build|\) AppleWebKit)'
|
2984
3202
|
device_replacement: '$1'
|
2985
3203
|
brand_replacement: 'Jaytech'
|
2986
3204
|
model_replacement: '$1'
|
@@ -2989,7 +3207,7 @@ device_parsers:
|
|
2989
3207
|
# Jiayu
|
2990
3208
|
# @ref: http://www.ejiayu.com/en/Product.html
|
2991
3209
|
#########
|
2992
|
-
- regex: ';
|
3210
|
+
- regex: '; {0,2}(JY-[^;/]{1,100}|G[234]S?)(?: Build|\) AppleWebKit)'
|
2993
3211
|
device_replacement: '$1'
|
2994
3212
|
brand_replacement: 'Jiayu'
|
2995
3213
|
model_replacement: '$1'
|
@@ -2998,7 +3216,7 @@ device_parsers:
|
|
2998
3216
|
# JXD
|
2999
3217
|
# @ref: http://www.jxd.hk/
|
3000
3218
|
#########
|
3001
|
-
- regex: ';
|
3219
|
+
- regex: '; {0,2}(JXD)[ _\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3002
3220
|
device_replacement: '$1 $2'
|
3003
3221
|
brand_replacement: 'JXD'
|
3004
3222
|
model_replacement: '$2'
|
@@ -3007,16 +3225,16 @@ device_parsers:
|
|
3007
3225
|
# Karbonn
|
3008
3226
|
# @ref: http://www.karbonnmobiles.com/products_tablet.php
|
3009
3227
|
#########
|
3010
|
-
- regex: ';
|
3228
|
+
- regex: '; {0,2}Karbonn[ _]?([^;/]{1,100}) {0,2}(?:Build|;)'
|
3011
3229
|
regex_flag: 'i'
|
3012
3230
|
device_replacement: '$1'
|
3013
3231
|
brand_replacement: 'Karbonn'
|
3014
3232
|
model_replacement: '$1'
|
3015
|
-
- regex: ';
|
3233
|
+
- regex: '; {0,2}([^;]{1,200}) Build/Karbonn'
|
3016
3234
|
device_replacement: '$1'
|
3017
3235
|
brand_replacement: 'Karbonn'
|
3018
3236
|
model_replacement: '$1'
|
3019
|
-
- regex: ';
|
3237
|
+
- regex: '; {0,2}(A11|A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2|Titanium S\d) +Build'
|
3020
3238
|
device_replacement: '$1'
|
3021
3239
|
brand_replacement: 'Karbonn'
|
3022
3240
|
model_replacement: '$1'
|
@@ -3025,84 +3243,84 @@ device_parsers:
|
|
3025
3243
|
# KDDI (Operator Branded Device)
|
3026
3244
|
# @ref: http://www.ipentec.com/document/document.aspx?page=android-useragent
|
3027
3245
|
#########
|
3028
|
-
- regex: ';
|
3246
|
+
- regex: '; {0,2}(IS01|IS03|IS05|IS\d{2}SH)(?: Build|\) AppleWebKit)'
|
3029
3247
|
device_replacement: '$1'
|
3030
3248
|
brand_replacement: 'Sharp'
|
3031
3249
|
model_replacement: '$1'
|
3032
|
-
- regex: ';
|
3250
|
+
- regex: '; {0,2}(IS04)(?: Build|\) AppleWebKit)'
|
3033
3251
|
device_replacement: '$1'
|
3034
3252
|
brand_replacement: 'Regza'
|
3035
3253
|
model_replacement: '$1'
|
3036
|
-
- regex: ';
|
3254
|
+
- regex: '; {0,2}(IS06|IS\d{2}PT)(?: Build|\) AppleWebKit)'
|
3037
3255
|
device_replacement: '$1'
|
3038
3256
|
brand_replacement: 'Pantech'
|
3039
3257
|
model_replacement: '$1'
|
3040
|
-
- regex: ';
|
3258
|
+
- regex: '; {0,2}(IS11S)(?: Build|\) AppleWebKit)'
|
3041
3259
|
device_replacement: '$1'
|
3042
3260
|
brand_replacement: 'SonyEricsson'
|
3043
3261
|
model_replacement: 'Xperia Acro'
|
3044
|
-
- regex: ';
|
3262
|
+
- regex: '; {0,2}(IS11CA)(?: Build|\) AppleWebKit)'
|
3045
3263
|
device_replacement: '$1'
|
3046
3264
|
brand_replacement: 'Casio'
|
3047
3265
|
model_replacement: 'GzOne $1'
|
3048
|
-
- regex: ';
|
3266
|
+
- regex: '; {0,2}(IS11LG)(?: Build|\) AppleWebKit)'
|
3049
3267
|
device_replacement: '$1'
|
3050
3268
|
brand_replacement: 'LG'
|
3051
3269
|
model_replacement: 'Optimus X'
|
3052
|
-
- regex: ';
|
3270
|
+
- regex: '; {0,2}(IS11N)(?: Build|\) AppleWebKit)'
|
3053
3271
|
device_replacement: '$1'
|
3054
3272
|
brand_replacement: 'Medias'
|
3055
3273
|
model_replacement: '$1'
|
3056
|
-
- regex: ';
|
3274
|
+
- regex: '; {0,2}(IS11PT)(?: Build|\) AppleWebKit)'
|
3057
3275
|
device_replacement: '$1'
|
3058
3276
|
brand_replacement: 'Pantech'
|
3059
3277
|
model_replacement: 'MIRACH'
|
3060
|
-
- regex: ';
|
3278
|
+
- regex: '; {0,2}(IS12F)(?: Build|\) AppleWebKit)'
|
3061
3279
|
device_replacement: '$1'
|
3062
3280
|
brand_replacement: 'Fujitsu'
|
3063
3281
|
model_replacement: 'Arrows ES'
|
3064
3282
|
# @ref: https://ja.wikipedia.org/wiki/IS12M
|
3065
|
-
- regex: ';
|
3283
|
+
- regex: '; {0,2}(IS12M)(?: Build|\) AppleWebKit)'
|
3066
3284
|
device_replacement: '$1'
|
3067
3285
|
brand_replacement: 'Motorola'
|
3068
3286
|
model_replacement: 'XT909'
|
3069
|
-
- regex: ';
|
3287
|
+
- regex: '; {0,2}(IS12S)(?: Build|\) AppleWebKit)'
|
3070
3288
|
device_replacement: '$1'
|
3071
3289
|
brand_replacement: 'SonyEricsson'
|
3072
3290
|
model_replacement: 'Xperia Acro HD'
|
3073
|
-
- regex: ';
|
3291
|
+
- regex: '; {0,2}(ISW11F)(?: Build|\) AppleWebKit)'
|
3074
3292
|
device_replacement: '$1'
|
3075
3293
|
brand_replacement: 'Fujitsu'
|
3076
3294
|
model_replacement: 'Arrowz Z'
|
3077
|
-
- regex: ';
|
3295
|
+
- regex: '; {0,2}(ISW11HT)(?: Build|\) AppleWebKit)'
|
3078
3296
|
device_replacement: '$1'
|
3079
3297
|
brand_replacement: 'HTC'
|
3080
3298
|
model_replacement: 'EVO'
|
3081
|
-
- regex: ';
|
3299
|
+
- regex: '; {0,2}(ISW11K)(?: Build|\) AppleWebKit)'
|
3082
3300
|
device_replacement: '$1'
|
3083
3301
|
brand_replacement: 'Kyocera'
|
3084
3302
|
model_replacement: 'DIGNO'
|
3085
|
-
- regex: ';
|
3303
|
+
- regex: '; {0,2}(ISW11M)(?: Build|\) AppleWebKit)'
|
3086
3304
|
device_replacement: '$1'
|
3087
3305
|
brand_replacement: 'Motorola'
|
3088
3306
|
model_replacement: 'Photon'
|
3089
|
-
- regex: ';
|
3307
|
+
- regex: '; {0,2}(ISW11SC)(?: Build|\) AppleWebKit)'
|
3090
3308
|
device_replacement: '$1'
|
3091
3309
|
brand_replacement: 'Samsung'
|
3092
3310
|
model_replacement: 'GALAXY S II WiMAX'
|
3093
|
-
- regex: ';
|
3311
|
+
- regex: '; {0,2}(ISW12HT)(?: Build|\) AppleWebKit)'
|
3094
3312
|
device_replacement: '$1'
|
3095
3313
|
brand_replacement: 'HTC'
|
3096
3314
|
model_replacement: 'EVO 3D'
|
3097
|
-
- regex: ';
|
3315
|
+
- regex: '; {0,2}(ISW13HT)(?: Build|\) AppleWebKit)'
|
3098
3316
|
device_replacement: '$1'
|
3099
3317
|
brand_replacement: 'HTC'
|
3100
3318
|
model_replacement: 'J'
|
3101
|
-
- regex: ';
|
3319
|
+
- regex: '; {0,2}(ISW?[0-9]{2}[A-Z]{0,2})(?: Build|\) AppleWebKit)'
|
3102
3320
|
device_replacement: '$1'
|
3103
3321
|
brand_replacement: 'KDDI'
|
3104
3322
|
model_replacement: '$1'
|
3105
|
-
- regex: ';
|
3323
|
+
- regex: '; {0,2}(INFOBAR [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3106
3324
|
device_replacement: '$1'
|
3107
3325
|
brand_replacement: 'KDDI'
|
3108
3326
|
model_replacement: '$1'
|
@@ -3111,7 +3329,7 @@ device_parsers:
|
|
3111
3329
|
# Kingcom
|
3112
3330
|
# @ref: http://www.e-kingcom.com
|
3113
3331
|
#########
|
3114
|
-
- regex: ';
|
3332
|
+
- regex: '; {0,2}(JOYPAD|Joypad)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3115
3333
|
device_replacement: '$1 $2'
|
3116
3334
|
brand_replacement: 'Kingcom'
|
3117
3335
|
model_replacement: '$1 $2'
|
@@ -3121,7 +3339,7 @@ device_parsers:
|
|
3121
3339
|
# @ref: https://en.wikipedia.org/wiki/Kobo_Inc.
|
3122
3340
|
# @ref: http://www.kobo.com/devices#tablets
|
3123
3341
|
#########
|
3124
|
-
- regex: ';
|
3342
|
+
- regex: '; {0,2}(Vox|VOX|Arc|K080)(?: Build|\) AppleWebKit)'
|
3125
3343
|
regex_flag: 'i'
|
3126
3344
|
device_replacement: '$1'
|
3127
3345
|
brand_replacement: 'Kobo'
|
@@ -3135,7 +3353,7 @@ device_parsers:
|
|
3135
3353
|
# K-Touch
|
3136
3354
|
# @ref: ??
|
3137
3355
|
#########
|
3138
|
-
- regex: ';
|
3356
|
+
- regex: '; {0,2}(K-Touch)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3139
3357
|
regex_flag: 'i'
|
3140
3358
|
device_replacement: '$1 $2'
|
3141
3359
|
brand_replacement: 'Ktouch'
|
@@ -3145,7 +3363,7 @@ device_parsers:
|
|
3145
3363
|
# KT Tech
|
3146
3364
|
# @ref: http://www.kttech.co.kr
|
3147
3365
|
#########
|
3148
|
-
- regex: ';
|
3366
|
+
- regex: '; {0,2}((?:EV|KM)-S\d+[A-Z]?)(?: Build|\) AppleWebKit)'
|
3149
3367
|
regex_flag: 'i'
|
3150
3368
|
device_replacement: '$1'
|
3151
3369
|
brand_replacement: 'KTtech'
|
@@ -3155,7 +3373,7 @@ device_parsers:
|
|
3155
3373
|
# Kyocera
|
3156
3374
|
# @ref: http://www.android.com/devices/?country=all&m=kyocera
|
3157
3375
|
#########
|
3158
|
-
- regex: ';
|
3376
|
+
- regex: '; {0,2}(Zio|Hydro|Torque|Event|EVENT|Echo|Milano|Rise|URBANO PROGRESSO|WX04K|WX06K|WX10K|KYL21|101K|C5[12]\d{2})(?: Build|\) AppleWebKit)'
|
3159
3377
|
device_replacement: '$1'
|
3160
3378
|
brand_replacement: 'Kyocera'
|
3161
3379
|
model_replacement: '$1'
|
@@ -3164,12 +3382,12 @@ device_parsers:
|
|
3164
3382
|
# Lava
|
3165
3383
|
# @ref: http://www.lavamobiles.com/
|
3166
3384
|
#########
|
3167
|
-
- regex: ';
|
3385
|
+
- regex: '; {0,2}(?:LAVA[ _]|)IRIS[ _\-]?([^/;\)]+) {0,2}(?:;|\)|Build)'
|
3168
3386
|
regex_flag: 'i'
|
3169
3387
|
device_replacement: 'Iris $1'
|
3170
3388
|
brand_replacement: 'Lava'
|
3171
3389
|
model_replacement: 'Iris $1'
|
3172
|
-
- regex: ';
|
3390
|
+
- regex: '; {0,2}LAVA[ _]([^;/]{1,100}) Build'
|
3173
3391
|
device_replacement: '$1'
|
3174
3392
|
brand_replacement: 'Lava'
|
3175
3393
|
model_replacement: '$1'
|
@@ -3178,7 +3396,7 @@ device_parsers:
|
|
3178
3396
|
# Lemon
|
3179
3397
|
# @ref: http://www.lemonmobiles.com/products.php?type=1
|
3180
3398
|
#########
|
3181
|
-
- regex: ';
|
3399
|
+
- regex: '; {0,2}(?:(Aspire A1)|(?:LEMON|Lemon)[ _]([^;/]{1,100}))_?(?: Build|\) AppleWebKit)'
|
3182
3400
|
device_replacement: 'Lemon $1$2'
|
3183
3401
|
brand_replacement: 'Lemon'
|
3184
3402
|
model_replacement: '$1$2'
|
@@ -3187,11 +3405,11 @@ device_parsers:
|
|
3187
3405
|
# Lenco
|
3188
3406
|
# @ref: http://www.lenco.com/c/tablets/
|
3189
3407
|
#########
|
3190
|
-
- regex: ';
|
3408
|
+
- regex: '; {0,2}(TAB-1012)(?: Build|\) AppleWebKit)'
|
3191
3409
|
device_replacement: 'Lenco $1'
|
3192
3410
|
brand_replacement: 'Lenco'
|
3193
3411
|
model_replacement: '$1'
|
3194
|
-
- regex: '; Lenco ([^;/]
|
3412
|
+
- regex: '; Lenco ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3195
3413
|
device_replacement: 'Lenco $1'
|
3196
3414
|
brand_replacement: 'Lenco'
|
3197
3415
|
model_replacement: '$1'
|
@@ -3200,23 +3418,23 @@ device_parsers:
|
|
3200
3418
|
# Lenovo
|
3201
3419
|
# @ref: http://support.lenovo.com/en_GB/downloads/default.page?#
|
3202
3420
|
#########
|
3203
|
-
- regex: ';
|
3421
|
+
- regex: '; {0,2}(A1_07|A2107A-H|S2005A-H|S1-37AH0) Build'
|
3204
3422
|
device_replacement: '$1'
|
3205
3423
|
brand_replacement: 'Lenovo'
|
3206
3424
|
model_replacement: '$1'
|
3207
|
-
- regex: ';
|
3425
|
+
- regex: '; {0,2}(Idea[Tp]ab)[ _]([^;/]{1,100});? Build'
|
3208
3426
|
device_replacement: 'Lenovo $1 $2'
|
3209
3427
|
brand_replacement: 'Lenovo'
|
3210
3428
|
model_replacement: '$1 $2'
|
3211
|
-
- regex: ';
|
3429
|
+
- regex: '; {0,2}(Idea(?:Tab|pad)) ?([^;/]{1,100}) Build'
|
3212
3430
|
device_replacement: 'Lenovo $1 $2'
|
3213
3431
|
brand_replacement: 'Lenovo'
|
3214
3432
|
model_replacement: '$1 $2'
|
3215
|
-
- regex: ';
|
3433
|
+
- regex: '; {0,2}(ThinkPad) ?(Tablet) Build/'
|
3216
3434
|
device_replacement: 'Lenovo $1 $2'
|
3217
3435
|
brand_replacement: 'Lenovo'
|
3218
3436
|
model_replacement: '$1 $2'
|
3219
|
-
- regex: ';
|
3437
|
+
- regex: '; {0,2}(?:LNV-|)(?:=?[Ll]enovo[ _\-]?|LENOVO[ _])(.{1,200}?)(?:Build|[;/\)])'
|
3220
3438
|
device_replacement: 'Lenovo $1'
|
3221
3439
|
brand_replacement: 'Lenovo'
|
3222
3440
|
model_replacement: '$1'
|
@@ -3224,11 +3442,11 @@ device_parsers:
|
|
3224
3442
|
device_replacement: 'Lenovo $1 $2 $3'
|
3225
3443
|
brand_replacement: 'Lenovo'
|
3226
3444
|
model_replacement: '$1 $2 $3'
|
3227
|
-
- regex: ';
|
3445
|
+
- regex: '; {0,2}(?:Ideapad |)K1 Build/'
|
3228
3446
|
device_replacement: 'Lenovo Ideapad K1'
|
3229
3447
|
brand_replacement: 'Lenovo'
|
3230
3448
|
model_replacement: 'Ideapad K1'
|
3231
|
-
- regex: ';
|
3449
|
+
- regex: '; {0,2}(3GC101|3GW10[01]|A390) Build/'
|
3232
3450
|
device_replacement: '$1'
|
3233
3451
|
brand_replacement: 'Lenovo'
|
3234
3452
|
model_replacement: '$1'
|
@@ -3241,7 +3459,7 @@ device_parsers:
|
|
3241
3459
|
# Lexibook
|
3242
3460
|
# @ref: http://www.lexibook.com/fr
|
3243
3461
|
#########
|
3244
|
-
- regex: ';
|
3462
|
+
- regex: '; {0,2}(MFC\d+)[A-Z]{2}([^;,/]*),?(?: Build|\) AppleWebKit)'
|
3245
3463
|
device_replacement: '$1$2'
|
3246
3464
|
brand_replacement: 'Lexibook'
|
3247
3465
|
model_replacement: '$1$2'
|
@@ -3250,23 +3468,23 @@ device_parsers:
|
|
3250
3468
|
# LG
|
3251
3469
|
# @ref: http://www.lg.com/uk/mobile
|
3252
3470
|
#########
|
3253
|
-
- regex: ';
|
3471
|
+
- regex: '; {0,2}(E[34][0-9]{2}|LS[6-8][0-9]{2}|VS[6-9][0-9]+[^;/]{1,30}|Nexus 4|Nexus 5X?|GT540f?|Optimus (?:2X|G|4X HD)|OptimusX4HD) {0,2}(?:Build|;)'
|
3254
3472
|
device_replacement: '$1'
|
3255
3473
|
brand_replacement: 'LG'
|
3256
3474
|
model_replacement: '$1'
|
3257
|
-
- regex: '[;:]
|
3475
|
+
- regex: '[;:] {0,2}(L-\d+[A-Z]|LGL\d+[A-Z]?)(?:/V\d+|) {0,2}(?:Build|[;\)])'
|
3258
3476
|
device_replacement: '$1'
|
3259
3477
|
brand_replacement: 'LG'
|
3260
3478
|
model_replacement: '$1'
|
3261
|
-
- regex: ';
|
3479
|
+
- regex: '; {0,2}(LG-)([A-Z]{1,2}\d{2,}[^,;/\)\(]*?)(?:Build| V\d+|[,;/\)\(]|$)'
|
3262
3480
|
device_replacement: '$1$2'
|
3263
3481
|
brand_replacement: 'LG'
|
3264
3482
|
model_replacement: '$2'
|
3265
|
-
- regex: ';
|
3483
|
+
- regex: '; {0,2}(LG[ \-]|LG)([^;/]{1,100})[;/]? Build'
|
3266
3484
|
device_replacement: '$1$2'
|
3267
3485
|
brand_replacement: 'LG'
|
3268
3486
|
model_replacement: '$2'
|
3269
|
-
- regex: '^(LG)-([^;/]
|
3487
|
+
- regex: '^(LG)-([^;/]{1,100})/ Mozilla/.{0,200}; Android'
|
3270
3488
|
device_replacement: '$1 $2'
|
3271
3489
|
brand_replacement: 'LG'
|
3272
3490
|
model_replacement: '$2'
|
@@ -3279,11 +3497,11 @@ device_parsers:
|
|
3279
3497
|
# Malata
|
3280
3498
|
# @ref: http://www.malata.com/en/products.aspx?classid=680
|
3281
3499
|
#########
|
3282
|
-
- regex: ';
|
3500
|
+
- regex: '; {0,2}((?:SMB|smb)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3283
3501
|
device_replacement: '$1'
|
3284
3502
|
brand_replacement: 'Malata'
|
3285
3503
|
model_replacement: '$1'
|
3286
|
-
- regex: ';
|
3504
|
+
- regex: '; {0,2}(?:Malata|MALATA) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3287
3505
|
device_replacement: '$1'
|
3288
3506
|
brand_replacement: 'Malata'
|
3289
3507
|
model_replacement: '$1'
|
@@ -3292,7 +3510,7 @@ device_parsers:
|
|
3292
3510
|
# Manta
|
3293
3511
|
# @ref: http://www.manta.com.pl/en
|
3294
3512
|
#########
|
3295
|
-
- regex: ';
|
3513
|
+
- regex: '; {0,2}(MS[45][0-9]{3}|MID0[568][NS]?|MID[1-9]|MID[78]0[1-9]|MID970[1-9]|MID100[1-9])(?: Build|\) AppleWebKit)'
|
3296
3514
|
device_replacement: '$1'
|
3297
3515
|
brand_replacement: 'Manta'
|
3298
3516
|
model_replacement: '$1'
|
@@ -3301,7 +3519,7 @@ device_parsers:
|
|
3301
3519
|
# Match
|
3302
3520
|
# @ref: http://www.match.net.cn/products.asp
|
3303
3521
|
#########
|
3304
|
-
- regex: ';
|
3522
|
+
- regex: '; {0,2}(M1052|M806|M9000|M9100|M9701|MID100|MID120|MID125|MID130|MID135|MID140|MID701|MID710|MID713|MID727|MID728|MID731|MID732|MID733|MID735|MID736|MID737|MID760|MID800|MID810|MID820|MID830|MID833|MID835|MID860|MID900|MID930|MID933|MID960|MID980)(?: Build|\) AppleWebKit)'
|
3305
3523
|
device_replacement: '$1'
|
3306
3524
|
brand_replacement: 'Match'
|
3307
3525
|
model_replacement: '$1'
|
@@ -3315,7 +3533,7 @@ device_parsers:
|
|
3315
3533
|
# Maxx MT150, Maxx MQ601, Maxx M2020, Maxx Sleek MX463neo, Maxx MX525, Maxx MX192-Tune, Maxx Genx Droid 7 AX353,
|
3316
3534
|
# @note: Need more User-Agents!!!
|
3317
3535
|
#########
|
3318
|
-
- regex: ';
|
3536
|
+
- regex: '; {0,2}(GenxDroid7|MSD7.{0,200}?|AX\d.{0,200}?|Tab 701|Tab 722)(?: Build|\) AppleWebKit)'
|
3319
3537
|
device_replacement: 'Maxx $1'
|
3320
3538
|
brand_replacement: 'Maxx'
|
3321
3539
|
model_replacement: '$1'
|
@@ -3324,11 +3542,11 @@ device_parsers:
|
|
3324
3542
|
# Mediacom
|
3325
3543
|
# @ref: http://www.mediacomeurope.it/
|
3326
3544
|
#########
|
3327
|
-
- regex: ';
|
3545
|
+
- regex: '; {0,2}(M-PP[^;/]{1,30}|PhonePad ?\d{2,}[^;/]{1,30}?)(?: Build|\) AppleWebKit)'
|
3328
3546
|
device_replacement: 'Mediacom $1'
|
3329
3547
|
brand_replacement: 'Mediacom'
|
3330
3548
|
model_replacement: '$1'
|
3331
|
-
- regex: ';
|
3549
|
+
- regex: '; {0,2}(M-MP[^;/]{1,30}|SmartPad ?\d{2,}[^;/]{1,30}?)(?: Build|\) AppleWebKit)'
|
3332
3550
|
device_replacement: 'Mediacom $1'
|
3333
3551
|
brand_replacement: 'Mediacom'
|
3334
3552
|
model_replacement: '$1'
|
@@ -3337,12 +3555,12 @@ device_parsers:
|
|
3337
3555
|
# Medion
|
3338
3556
|
# @ref: http://www.medion.com/en/
|
3339
3557
|
#########
|
3340
|
-
- regex: ';
|
3558
|
+
- regex: '; {0,2}(?:MD_|)LIFETAB[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3341
3559
|
regex_flag: 'i'
|
3342
3560
|
device_replacement: 'Medion Lifetab $1'
|
3343
3561
|
brand_replacement: 'Medion'
|
3344
3562
|
model_replacement: 'Lifetab $1'
|
3345
|
-
- regex: ';
|
3563
|
+
- regex: '; {0,2}MEDION ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3346
3564
|
device_replacement: 'Medion $1'
|
3347
3565
|
brand_replacement: 'Medion'
|
3348
3566
|
model_replacement: '$1'
|
@@ -3351,41 +3569,60 @@ device_parsers:
|
|
3351
3569
|
# Meizu
|
3352
3570
|
# @ref: http://www.meizu.com
|
3353
3571
|
#########
|
3354
|
-
- regex: ';
|
3572
|
+
- regex: '; {0,2}(M030|M031|M035|M040|M065|m9)(?: Build|\) AppleWebKit)'
|
3355
3573
|
device_replacement: 'Meizu $1'
|
3356
3574
|
brand_replacement: 'Meizu'
|
3357
3575
|
model_replacement: '$1'
|
3358
|
-
- regex: ';
|
3576
|
+
- regex: '; {0,2}(?:meizu_|MEIZU )(.{1,200}?) {0,2}(?:Build|[;\)])'
|
3359
3577
|
device_replacement: 'Meizu $1'
|
3360
3578
|
brand_replacement: 'Meizu'
|
3361
3579
|
model_replacement: '$1'
|
3362
3580
|
|
3581
|
+
#########
|
3582
|
+
# Meta
|
3583
|
+
# @ref: https://www.meta.com
|
3584
|
+
#########
|
3585
|
+
- regex: 'Quest 2'
|
3586
|
+
device_replacement: 'Quest'
|
3587
|
+
brand_replacement: 'Meta'
|
3588
|
+
model_replacement: 'Quest 2'
|
3589
|
+
|
3590
|
+
- regex: 'Quest Pro'
|
3591
|
+
device_replacement: 'Quest'
|
3592
|
+
brand_replacement: 'Meta'
|
3593
|
+
model_replacement: 'Quest Pro'
|
3594
|
+
|
3595
|
+
- regex: 'Quest'
|
3596
|
+
device_replacement: 'Quest'
|
3597
|
+
brand_replacement: 'Meta'
|
3598
|
+
model_replacement: 'Quest'
|
3599
|
+
|
3363
3600
|
#########
|
3364
3601
|
# Micromax
|
3365
3602
|
# @ref: http://www.micromaxinfo.com
|
3366
3603
|
#########
|
3367
|
-
- regex: ';
|
3604
|
+
- regex: '; {0,2}(?:Micromax[ _](A111|A240)|(A111|A240)) Build'
|
3368
3605
|
regex_flag: 'i'
|
3369
3606
|
device_replacement: 'Micromax $1$2'
|
3370
3607
|
brand_replacement: 'Micromax'
|
3371
3608
|
model_replacement: '$1$2'
|
3372
|
-
- regex: ';
|
3609
|
+
- regex: '; {0,2}Micromax[ _](A\d{2,3}[^;/]*) Build'
|
3373
3610
|
regex_flag: 'i'
|
3374
3611
|
device_replacement: 'Micromax $1'
|
3375
3612
|
brand_replacement: 'Micromax'
|
3376
3613
|
model_replacement: '$1'
|
3377
3614
|
# be carefull here with Acer e.g. A500
|
3378
|
-
- regex: ';
|
3615
|
+
- regex: '; {0,2}(A\d{2}|A[12]\d{2}|A90S|A110Q) Build'
|
3379
3616
|
regex_flag: 'i'
|
3380
3617
|
device_replacement: 'Micromax $1'
|
3381
3618
|
brand_replacement: 'Micromax'
|
3382
3619
|
model_replacement: '$1'
|
3383
|
-
- regex: ';
|
3620
|
+
- regex: '; {0,2}Micromax[ _](P\d{3}[^;/]*) Build'
|
3384
3621
|
regex_flag: 'i'
|
3385
3622
|
device_replacement: 'Micromax $1'
|
3386
3623
|
brand_replacement: 'Micromax'
|
3387
3624
|
model_replacement: '$1'
|
3388
|
-
- regex: ';
|
3625
|
+
- regex: '; {0,2}(P\d{3}|P\d{3}\(Funbook\)) Build'
|
3389
3626
|
regex_flag: 'i'
|
3390
3627
|
device_replacement: 'Micromax $1'
|
3391
3628
|
brand_replacement: 'Micromax'
|
@@ -3395,7 +3632,7 @@ device_parsers:
|
|
3395
3632
|
# Mito
|
3396
3633
|
# @ref: http://new.mitomobile.com/
|
3397
3634
|
#########
|
3398
|
-
- regex: ';
|
3635
|
+
- regex: '; {0,2}(MITO)[ _\-]?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3399
3636
|
regex_flag: 'i'
|
3400
3637
|
device_replacement: '$1 $2'
|
3401
3638
|
brand_replacement: 'Mito'
|
@@ -3405,7 +3642,7 @@ device_parsers:
|
|
3405
3642
|
# Mobistel
|
3406
3643
|
# @ref: http://www.mobistel.com/
|
3407
3644
|
#########
|
3408
|
-
- regex: ';
|
3645
|
+
- regex: '; {0,2}(Cynus)[ _](F5|T\d|.{1,200}?) {0,2}(?:Build|[;/\)])'
|
3409
3646
|
regex_flag: 'i'
|
3410
3647
|
device_replacement: '$1 $2'
|
3411
3648
|
brand_replacement: 'Mobistel'
|
@@ -3415,12 +3652,12 @@ device_parsers:
|
|
3415
3652
|
# Modecom
|
3416
3653
|
# @ref: http://www.modecom.eu/tablets/portal/
|
3417
3654
|
#########
|
3418
|
-
- regex: ';
|
3655
|
+
- regex: '; {0,2}(MODECOM |)(FreeTab) ?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3419
3656
|
regex_flag: 'i'
|
3420
3657
|
device_replacement: '$1$2 $3'
|
3421
3658
|
brand_replacement: 'Modecom'
|
3422
3659
|
model_replacement: '$2 $3'
|
3423
|
-
- regex: ';
|
3660
|
+
- regex: '; {0,2}(MODECOM )([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3424
3661
|
regex_flag: 'i'
|
3425
3662
|
device_replacement: '$1 $2'
|
3426
3663
|
brand_replacement: 'Modecom'
|
@@ -3430,32 +3667,32 @@ device_parsers:
|
|
3430
3667
|
# Motorola
|
3431
3668
|
# @ref: http://www.motorola.com/us/shop-all-mobile-phones/
|
3432
3669
|
#########
|
3433
|
-
- regex: ';
|
3670
|
+
- regex: '; {0,2}(MZ\d{3}\+?|MZ\d{3} 4G|Xoom|XOOM[^;/]*) Build'
|
3434
3671
|
device_replacement: 'Motorola $1'
|
3435
3672
|
brand_replacement: 'Motorola'
|
3436
3673
|
model_replacement: '$1'
|
3437
|
-
- regex: ';
|
3674
|
+
- regex: '; {0,2}(Milestone )(XT[^;/]*) Build'
|
3438
3675
|
device_replacement: 'Motorola $1$2'
|
3439
3676
|
brand_replacement: 'Motorola'
|
3440
3677
|
model_replacement: '$2'
|
3441
|
-
- regex: ';
|
3678
|
+
- regex: '; {0,2}(Motoroi ?x|Droid X|DROIDX) Build'
|
3442
3679
|
regex_flag: 'i'
|
3443
3680
|
device_replacement: 'Motorola $1'
|
3444
3681
|
brand_replacement: 'Motorola'
|
3445
3682
|
model_replacement: 'DROID X'
|
3446
|
-
- regex: ';
|
3683
|
+
- regex: '; {0,2}(Droid[^;/]*|DROID[^;/]*|Milestone[^;/]*|Photon|Triumph|Devour|Titanium) Build'
|
3447
3684
|
device_replacement: 'Motorola $1'
|
3448
3685
|
brand_replacement: 'Motorola'
|
3449
3686
|
model_replacement: '$1'
|
3450
|
-
- regex: ';
|
3687
|
+
- regex: '; {0,2}(A555|A85[34][^;/]*|A95[356]|ME[58]\d{2}\+?|ME600|ME632|ME722|MB\d{3}\+?|MT680|MT710|MT870|MT887|MT917|WX435|WX453|WX44[25]|XT\d{3,4}[A-Z\+]*|CL[iI]Q|CL[iI]Q XT) Build'
|
3451
3688
|
device_replacement: '$1'
|
3452
3689
|
brand_replacement: 'Motorola'
|
3453
3690
|
model_replacement: '$1'
|
3454
|
-
- regex: ';
|
3691
|
+
- regex: '; {0,2}(Motorola MOT-|Motorola[ _\-]|MOT\-?)([^;/]{1,100}) Build'
|
3455
3692
|
device_replacement: '$1$2'
|
3456
3693
|
brand_replacement: 'Motorola'
|
3457
3694
|
model_replacement: '$2'
|
3458
|
-
- regex: ';
|
3695
|
+
- regex: '; {0,2}(Moto[_ ]?|MOT\-)([^;/]{1,100}) Build'
|
3459
3696
|
device_replacement: '$1$2'
|
3460
3697
|
brand_replacement: 'Motorola'
|
3461
3698
|
model_replacement: '$2'
|
@@ -3464,7 +3701,7 @@ device_parsers:
|
|
3464
3701
|
# MpMan
|
3465
3702
|
# @ref: http://www.mpmaneurope.com
|
3466
3703
|
#########
|
3467
|
-
- regex: ';
|
3704
|
+
- regex: '; {0,2}((?:MP[DQ]C|MPG\d{1,4}|MP\d{3,4}|MID(?:(?:10[234]|114|43|7[247]|8[24]|7)C|8[01]1))[^;/]*)(?: Build|\) AppleWebKit)'
|
3468
3705
|
device_replacement: '$1'
|
3469
3706
|
brand_replacement: 'Mpman'
|
3470
3707
|
model_replacement: '$1'
|
@@ -3473,7 +3710,7 @@ device_parsers:
|
|
3473
3710
|
# MSI
|
3474
3711
|
# @ref: http://www.msi.com/product/windpad/
|
3475
3712
|
#########
|
3476
|
-
- regex: ';
|
3713
|
+
- regex: '; {0,2}(?:MSI[ _]|)(Primo\d+|Enjoy[ _\-][^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3477
3714
|
regex_flag: 'i'
|
3478
3715
|
device_replacement: '$1'
|
3479
3716
|
brand_replacement: 'Msi'
|
@@ -3483,7 +3720,7 @@ device_parsers:
|
|
3483
3720
|
# Multilaser
|
3484
3721
|
# http://www.multilaser.com.br/listagem_produtos.php?cat=5
|
3485
3722
|
#########
|
3486
|
-
- regex: ';
|
3723
|
+
- regex: '; {0,2}Multilaser[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3487
3724
|
device_replacement: '$1'
|
3488
3725
|
brand_replacement: 'Multilaser'
|
3489
3726
|
model_replacement: '$1'
|
@@ -3492,15 +3729,15 @@ device_parsers:
|
|
3492
3729
|
# MyPhone
|
3493
3730
|
# @ref: http://myphone.com.ph/
|
3494
3731
|
#########
|
3495
|
-
- regex: ';
|
3732
|
+
- regex: '; {0,2}(My)[_]?(Pad)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3496
3733
|
device_replacement: '$1$2 $3'
|
3497
3734
|
brand_replacement: 'MyPhone'
|
3498
3735
|
model_replacement: '$1$2 $3'
|
3499
|
-
- regex: ';
|
3736
|
+
- regex: '; {0,2}(My)\|?(Phone)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3500
3737
|
device_replacement: '$1$2 $3'
|
3501
3738
|
brand_replacement: 'MyPhone'
|
3502
3739
|
model_replacement: '$3'
|
3503
|
-
- regex: ';
|
3740
|
+
- regex: '; {0,2}(A\d+)[ _](Duo|)(?: Build|\) AppleWebKit)'
|
3504
3741
|
regex_flag: 'i'
|
3505
3742
|
device_replacement: '$1 $2'
|
3506
3743
|
brand_replacement: 'MyPhone'
|
@@ -3510,7 +3747,7 @@ device_parsers:
|
|
3510
3747
|
# Mytab
|
3511
3748
|
# @ref: http://www.mytab.eu/en/category/mytab-products/
|
3512
3749
|
#########
|
3513
|
-
- regex: ';
|
3750
|
+
- regex: '; {0,2}(myTab[^;/]*)(?: Build|\) AppleWebKit)'
|
3514
3751
|
device_replacement: '$1'
|
3515
3752
|
brand_replacement: 'Mytab'
|
3516
3753
|
model_replacement: '$1'
|
@@ -3519,7 +3756,7 @@ device_parsers:
|
|
3519
3756
|
# Nabi
|
3520
3757
|
# @ref: https://www.nabitablet.com
|
3521
3758
|
#########
|
3522
|
-
- regex: ';
|
3759
|
+
- regex: '; {0,2}(NABI2?-)([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3523
3760
|
device_replacement: '$1$2'
|
3524
3761
|
brand_replacement: 'Nabi'
|
3525
3762
|
model_replacement: '$2'
|
@@ -3528,15 +3765,15 @@ device_parsers:
|
|
3528
3765
|
# Nec Medias
|
3529
3766
|
# @ref: http://www.n-keitai.com/
|
3530
3767
|
#########
|
3531
|
-
- regex: ';
|
3768
|
+
- regex: '; {0,2}(N-\d+[CDE])(?: Build|\) AppleWebKit)'
|
3532
3769
|
device_replacement: '$1'
|
3533
3770
|
brand_replacement: 'Nec'
|
3534
3771
|
model_replacement: '$1'
|
3535
|
-
- regex: '; ?(NEC-)(
|
3772
|
+
- regex: '; ?(NEC-)(.{0,200}?)(?: Build|\) AppleWebKit)'
|
3536
3773
|
device_replacement: '$1$2'
|
3537
3774
|
brand_replacement: 'Nec'
|
3538
3775
|
model_replacement: '$2'
|
3539
|
-
- regex: ';
|
3776
|
+
- regex: '; {0,2}(LT-NA7)(?: Build|\) AppleWebKit)'
|
3540
3777
|
device_replacement: '$1'
|
3541
3778
|
brand_replacement: 'Nec'
|
3542
3779
|
model_replacement: 'Lifetouch Note'
|
@@ -3545,7 +3782,7 @@ device_parsers:
|
|
3545
3782
|
# Nextbook
|
3546
3783
|
# @ref: http://nextbookusa.com
|
3547
3784
|
#########
|
3548
|
-
- regex: ';
|
3785
|
+
- regex: '; {0,2}(NXM\d+[A-Za-z0-9_]{0,50}|Next\d[A-Za-z0-9_ \-]{0,50}|NEXT\d[A-Za-z0-9_ \-]{0,50}|Nextbook [A-Za-z0-9_ ]{0,50}|DATAM803HC|M805)(?: Build|[\);])'
|
3549
3786
|
device_replacement: '$1'
|
3550
3787
|
brand_replacement: 'Nextbook'
|
3551
3788
|
model_replacement: '$1'
|
@@ -3554,12 +3791,12 @@ device_parsers:
|
|
3554
3791
|
# Nokia
|
3555
3792
|
# @ref: http://www.nokia.com
|
3556
3793
|
#########
|
3557
|
-
- regex: ';
|
3794
|
+
- regex: '; {0,2}(Nokia)([ _\-]{0,5})([^;/]{0,50}) Build'
|
3558
3795
|
regex_flag: 'i'
|
3559
3796
|
device_replacement: '$1$2$3'
|
3560
3797
|
brand_replacement: 'Nokia'
|
3561
3798
|
model_replacement: '$3'
|
3562
|
-
- regex: ';
|
3799
|
+
- regex: '; {0,2}(TA\-\d{4})(?: Build|\) AppleWebKit)'
|
3563
3800
|
device_replacement: 'Nokia $1'
|
3564
3801
|
brand_replacement: 'Nokia'
|
3565
3802
|
model_replacement: '$1'
|
@@ -3569,11 +3806,11 @@ device_parsers:
|
|
3569
3806
|
# @ref:
|
3570
3807
|
# TODO nook browser/1.0
|
3571
3808
|
#########
|
3572
|
-
- regex: ';
|
3809
|
+
- regex: '; {0,2}(Nook ?|Barnes & Noble Nook |BN )([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3573
3810
|
device_replacement: '$1$2'
|
3574
3811
|
brand_replacement: 'Nook'
|
3575
3812
|
model_replacement: '$2'
|
3576
|
-
- regex: ';
|
3813
|
+
- regex: '; {0,2}(NOOK |)(BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2)(?: Build|\) AppleWebKit)'
|
3577
3814
|
device_replacement: '$1$2'
|
3578
3815
|
brand_replacement: 'Nook'
|
3579
3816
|
model_replacement: '$2'
|
@@ -3586,7 +3823,7 @@ device_parsers:
|
|
3586
3823
|
# Olivetti
|
3587
3824
|
# @ref: http://www.olivetti.de/EN/Page/t02/view_html?idp=348
|
3588
3825
|
#########
|
3589
|
-
- regex: ';
|
3826
|
+
- regex: '; {0,2}(OP110|OliPad[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3590
3827
|
device_replacement: 'Olivetti $1'
|
3591
3828
|
brand_replacement: 'Olivetti'
|
3592
3829
|
model_replacement: '$1'
|
@@ -3597,7 +3834,7 @@ device_parsers:
|
|
3597
3834
|
# @note: MID tablets might get matched by CobyKyros first
|
3598
3835
|
# @models: (T107|MID(?:700[2-5]|7031|7108|7132|750[02]|8001|8500|9001|971[12])
|
3599
3836
|
#########
|
3600
|
-
- regex: ';
|
3837
|
+
- regex: '; {0,2}OMEGA[ _\-](MID[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3601
3838
|
device_replacement: 'Omega $1'
|
3602
3839
|
brand_replacement: 'Omega'
|
3603
3840
|
model_replacement: '$1'
|
@@ -3610,7 +3847,7 @@ device_parsers:
|
|
3610
3847
|
# OpenPeak
|
3611
3848
|
# @ref: https://support.google.com/googleplay/answer/1727131?hl=en
|
3612
3849
|
#########
|
3613
|
-
- regex: ';
|
3850
|
+
- regex: '; {0,2}((?:CIUS|cius)[^;/]*)(?: Build|\) AppleWebKit)'
|
3614
3851
|
device_replacement: 'Openpeak $1'
|
3615
3852
|
brand_replacement: 'Openpeak'
|
3616
3853
|
model_replacement: '$1'
|
@@ -3619,18 +3856,18 @@ device_parsers:
|
|
3619
3856
|
# Oppo
|
3620
3857
|
# @ref: http://en.oppo.com/products/
|
3621
3858
|
#########
|
3622
|
-
- regex: ';
|
3859
|
+
- regex: '; {0,2}(Find ?(?:5|7a)|R8[012]\d{1,2}|T703\d?|U70\d{1,2}T?|X90\d{1,2}|[AFR]\d{1,2}[a-z]{1,2})(?: Build|\) AppleWebKit)'
|
3623
3860
|
device_replacement: 'Oppo $1'
|
3624
3861
|
brand_replacement: 'Oppo'
|
3625
3862
|
model_replacement: '$1'
|
3626
|
-
- regex: ';
|
3863
|
+
- regex: '; {0,2}OPPO ?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3627
3864
|
device_replacement: 'Oppo $1'
|
3628
3865
|
brand_replacement: 'Oppo'
|
3629
3866
|
model_replacement: '$1'
|
3630
|
-
- regex: ';
|
3867
|
+
- regex: '; {0,2}(CPH\d{1,4}|RMX\d{1,4}|P[A-Z]{3}\d{2})(?: Build|\) AppleWebKit)'
|
3631
3868
|
device_replacement: 'Oppo $1'
|
3632
3869
|
brand_replacement: 'Oppo'
|
3633
|
-
- regex: ';
|
3870
|
+
- regex: '; {0,2}(A1601)(?: Build|\) AppleWebKit)'
|
3634
3871
|
device_replacement: 'Oppo F1s'
|
3635
3872
|
brand_replacement: 'Oppo'
|
3636
3873
|
model_replacement: '$1'
|
@@ -3639,20 +3876,20 @@ device_parsers:
|
|
3639
3876
|
# Odys
|
3640
3877
|
# @ref: http://odys.de
|
3641
3878
|
#########
|
3642
|
-
- regex: ';
|
3879
|
+
- regex: '; {0,2}(?:Odys\-|ODYS\-|ODYS )([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3643
3880
|
device_replacement: 'Odys $1'
|
3644
3881
|
brand_replacement: 'Odys'
|
3645
3882
|
model_replacement: '$1'
|
3646
|
-
- regex: ';
|
3883
|
+
- regex: '; {0,2}(SELECT) ?(7)(?: Build|\) AppleWebKit)'
|
3647
3884
|
device_replacement: 'Odys $1 $2'
|
3648
3885
|
brand_replacement: 'Odys'
|
3649
3886
|
model_replacement: '$1 $2'
|
3650
|
-
- regex: ';
|
3887
|
+
- regex: '; {0,2}(PEDI)_(PLUS)_(W)(?: Build|\) AppleWebKit)'
|
3651
3888
|
device_replacement: 'Odys $1 $2 $3'
|
3652
3889
|
brand_replacement: 'Odys'
|
3653
3890
|
model_replacement: '$1 $2 $3'
|
3654
3891
|
# Weltbild - Tablet PC 4 = Cat Phoenix = Odys Tablet PC 4?
|
3655
|
-
- regex: ';
|
3892
|
+
- regex: '; {0,2}(AEON|BRAVIO|FUSION|FUSION2IN1|Genio|EOS10|IEOS[^;/]*|IRON|Loox|LOOX|LOOX Plus|Motion|NOON|NOON_PRO|NEXT|OPOS|PEDI[^;/]*|PRIME[^;/]*|STUDYTAB|TABLO|Tablet-PC-4|UNO_X8|XELIO[^;/]*|Xelio ?\d+ ?[Pp]ro|XENO10|XPRESS PRO)(?: Build|\) AppleWebKit)'
|
3656
3893
|
device_replacement: 'Odys $1'
|
3657
3894
|
brand_replacement: 'Odys'
|
3658
3895
|
model_replacement: '$1'
|
@@ -3669,12 +3906,24 @@ device_parsers:
|
|
3669
3906
|
device_replacement: 'OnePlus $1'
|
3670
3907
|
brand_replacement: 'OnePlus'
|
3671
3908
|
model_replacement: '$1'
|
3909
|
+
- regex: '; {0,2}(HD1903|GM1917|IN2025|LE2115|LE2127|HD1907|BE2012|BE2025|BE2026|BE2028|BE2029|DE2117|DE2118|EB2101|GM1900|GM1910|GM1915|HD1905|HD1925|IN2015|IN2017|IN2019|KB2005|KB2007|LE2117|LE2125|BE2015|GM1903|HD1900|HD1901|HD1910|HD1913|IN2010|IN2013|IN2020|LE2111|LE2120|LE2121|LE2123|BE2011|IN2023|KB2003|LE2113|NE2215|DN2101)(?: Build|\) AppleWebKit)'
|
3910
|
+
device_replacement: 'OnePlus $1'
|
3911
|
+
brand_replacement: 'OnePlus'
|
3912
|
+
model_replacement: 'OnePlus $1'
|
3913
|
+
- regex: '; (OnePlus[ a-zA-z0-9]{0,50});((?: Build|.{0,50}\) AppleWebKit))'
|
3914
|
+
device_replacement: '$1'
|
3915
|
+
brand_replacement: 'OnePlus'
|
3916
|
+
model_replacement: '$1'
|
3917
|
+
- regex: '; (OnePlus[ a-zA-z0-9]{0,50})((?: Build|\) AppleWebKit))'
|
3918
|
+
device_replacement: '$1'
|
3919
|
+
brand_replacement: 'OnePlus'
|
3920
|
+
model_replacement: '$1'
|
3672
3921
|
|
3673
3922
|
#########
|
3674
3923
|
# Orion
|
3675
3924
|
# @ref: http://www.orion.ua/en/products/computer-products/tablet-pcs.html
|
3676
3925
|
#########
|
3677
|
-
- regex: ';
|
3926
|
+
- regex: '; {0,2}(TP-\d+)(?: Build|\) AppleWebKit)'
|
3678
3927
|
device_replacement: 'Orion $1'
|
3679
3928
|
brand_replacement: 'Orion'
|
3680
3929
|
model_replacement: '$1'
|
@@ -3683,7 +3932,7 @@ device_parsers:
|
|
3683
3932
|
# PackardBell
|
3684
3933
|
# @ref: http://www.packardbell.com/pb/en/AE/content/productgroup/tablets
|
3685
3934
|
#########
|
3686
|
-
- regex: ';
|
3935
|
+
- regex: '; {0,2}(G100W?)(?: Build|\) AppleWebKit)'
|
3687
3936
|
device_replacement: 'PackardBell $1'
|
3688
3937
|
brand_replacement: 'PackardBell'
|
3689
3938
|
model_replacement: '$1'
|
@@ -3694,17 +3943,17 @@ device_parsers:
|
|
3694
3943
|
# @models: T11, T21, T31, P11, P51, Eluga Power, Eluga DL1
|
3695
3944
|
# @models: (tab) Toughpad FZ-A1, Toughpad JT-B1
|
3696
3945
|
#########
|
3697
|
-
- regex: ';
|
3946
|
+
- regex: '; {0,2}(Panasonic)[_ ]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3698
3947
|
device_replacement: '$1 $2'
|
3699
3948
|
brand_replacement: '$1'
|
3700
3949
|
model_replacement: '$2'
|
3701
3950
|
# Toughpad
|
3702
|
-
- regex: ';
|
3951
|
+
- regex: '; {0,2}(FZ-A1B|JT-B1)(?: Build|\) AppleWebKit)'
|
3703
3952
|
device_replacement: 'Panasonic $1'
|
3704
3953
|
brand_replacement: 'Panasonic'
|
3705
3954
|
model_replacement: '$1'
|
3706
3955
|
# Eluga Power
|
3707
|
-
- regex: ';
|
3956
|
+
- regex: '; {0,2}(dL1|DL1)(?: Build|\) AppleWebKit)'
|
3708
3957
|
device_replacement: 'Panasonic $1'
|
3709
3958
|
brand_replacement: 'Panasonic'
|
3710
3959
|
model_replacement: '$1'
|
@@ -3715,15 +3964,15 @@ device_parsers:
|
|
3715
3964
|
# @href: http://www.pantech.co.kr/en/prod/prodList.do?gbrand=VEGA
|
3716
3965
|
# @models: ADR8995, ADR910L, ADR930VW, C790, CDM8992, CDM8999, IS06, IS11PT, P2000, P2020, P2030, P4100, P5000, P6010, P6020, P6030, P7000, P7040, P8000, P8010, P9020, P9050, P9060, P9070, P9090, PT001, PT002, PT003, TXT8040, TXT8045, VEGA PTL21
|
3717
3966
|
#########
|
3718
|
-
- regex: ';
|
3967
|
+
- regex: '; {0,2}(SKY[ _]|)(IM\-[AT]\d{3}[^;/]{1,100}).{0,30} Build/'
|
3719
3968
|
device_replacement: 'Pantech $1$2'
|
3720
3969
|
brand_replacement: 'Pantech'
|
3721
3970
|
model_replacement: '$1$2'
|
3722
|
-
- regex: ';
|
3971
|
+
- regex: '; {0,2}((?:ADR8995|ADR910L|ADR930L|ADR930VW|PTL21|P8000)(?: 4G|)) Build/'
|
3723
3972
|
device_replacement: '$1'
|
3724
3973
|
brand_replacement: 'Pantech'
|
3725
3974
|
model_replacement: '$1'
|
3726
|
-
- regex: ';
|
3975
|
+
- regex: '; {0,2}Pantech([^;/]{1,30}).{0,200}? Build/'
|
3727
3976
|
device_replacement: 'Pantech $1'
|
3728
3977
|
brand_replacement: 'Pantech'
|
3729
3978
|
model_replacement: '$1'
|
@@ -3732,7 +3981,7 @@ device_parsers:
|
|
3732
3981
|
# Papayre
|
3733
3982
|
# @ref: http://grammata.es/
|
3734
3983
|
#########
|
3735
|
-
- regex: ';
|
3984
|
+
- regex: '; {0,2}(papyre)[ _\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3736
3985
|
regex_flag: 'i'
|
3737
3986
|
device_replacement: '$1 $2'
|
3738
3987
|
brand_replacement: 'Papyre'
|
@@ -3742,7 +3991,7 @@ device_parsers:
|
|
3742
3991
|
# Pearl
|
3743
3992
|
# @ref: http://www.pearl.de/c-1540.shtml
|
3744
3993
|
#########
|
3745
|
-
- regex: ';
|
3994
|
+
- regex: '; {0,2}(?:Touchlet )?(X10\.[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3746
3995
|
device_replacement: 'Pearl $1'
|
3747
3996
|
brand_replacement: 'Pearl'
|
3748
3997
|
model_replacement: '$1'
|
@@ -3755,11 +4004,11 @@ device_parsers:
|
|
3755
4004
|
device_replacement: 'Phicomm $1'
|
3756
4005
|
brand_replacement: 'Phicomm'
|
3757
4006
|
model_replacement: '$1'
|
3758
|
-
- regex: '; PHICOMM ([^;/]
|
4007
|
+
- regex: '; PHICOMM ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3759
4008
|
device_replacement: 'Phicomm $1'
|
3760
4009
|
brand_replacement: 'Phicomm'
|
3761
4010
|
model_replacement: '$1'
|
3762
|
-
- regex: ';
|
4011
|
+
- regex: '; {0,2}(FWS\d{3}[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3763
4012
|
device_replacement: 'Phicomm $1'
|
3764
4013
|
brand_replacement: 'Phicomm'
|
3765
4014
|
model_replacement: '$1'
|
@@ -3771,11 +4020,11 @@ device_parsers:
|
|
3771
4020
|
# @ref: http://www.support.philips.com/support/catalog/products.jsp?_dyncharset=UTF-8&country=&categoryid=ENTERTAINMENT_TABLETS_SU_CN_CARE&userLanguage=en&navCount=0&groupId=&catalogType=&navAction=push&userCountry=cn&title=Entertainment+Tablets&cateId=TABLETS_CA_CN_CARE
|
3772
4021
|
#########
|
3773
4022
|
# @note: this a best guess according to available philips models. Need more User-Agents
|
3774
|
-
- regex: ';
|
4023
|
+
- regex: '; {0,2}(D633|D822|D833|T539|T939|V726|W335|W336|W337|W3568|W536|W5510|W626|W632|W6350|W6360|W6500|W732|W736|W737|W7376|W820|W832|W8355|W8500|W8510|W930)(?: Build|\) AppleWebKit)'
|
3775
4024
|
device_replacement: '$1'
|
3776
4025
|
brand_replacement: 'Philips'
|
3777
4026
|
model_replacement: '$1'
|
3778
|
-
- regex: ';
|
4027
|
+
- regex: '; {0,2}(?:Philips|PHILIPS)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3779
4028
|
device_replacement: 'Philips $1'
|
3780
4029
|
brand_replacement: 'Philips'
|
3781
4030
|
model_replacement: '$1'
|
@@ -3784,7 +4033,7 @@ device_parsers:
|
|
3784
4033
|
# Pipo
|
3785
4034
|
# @ref: http://www.pipo.cn/En/
|
3786
4035
|
#########
|
3787
|
-
- regex: 'Android 4
|
4036
|
+
- regex: 'Android 4\..{0,200}; {0,2}(M[12356789]|U[12368]|S[123])\ ?(pro)?(?: Build|\) AppleWebKit)'
|
3788
4037
|
device_replacement: 'Pipo $1$2'
|
3789
4038
|
brand_replacement: 'Pipo'
|
3790
4039
|
model_replacement: '$1$2'
|
@@ -3793,7 +4042,7 @@ device_parsers:
|
|
3793
4042
|
# Ployer
|
3794
4043
|
# @ref: http://en.ployer.cn/
|
3795
4044
|
#########
|
3796
|
-
- regex: ';
|
4045
|
+
- regex: '; {0,2}(MOMO[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3797
4046
|
device_replacement: '$1'
|
3798
4047
|
brand_replacement: 'Ployer'
|
3799
4048
|
model_replacement: '$1'
|
@@ -3802,11 +4051,11 @@ device_parsers:
|
|
3802
4051
|
# Polaroid/ Acho
|
3803
4052
|
# @ref: http://polaroidstore.com/store/start.asp?category_id=382&category_id2=0&order=title&filter1=&filter2=&filter3=&view=all
|
3804
4053
|
#########
|
3805
|
-
- regex: ';
|
4054
|
+
- regex: '; {0,2}(?:Polaroid[ _]|)((?:MIDC\d{3,}|PMID\d{2,}|PTAB\d{3,})[^;/]{0,30}?)(\/[^;/]{0,30}|)(?: Build|\) AppleWebKit)'
|
3806
4055
|
device_replacement: '$1'
|
3807
4056
|
brand_replacement: 'Polaroid'
|
3808
4057
|
model_replacement: '$1'
|
3809
|
-
- regex: ';
|
4058
|
+
- regex: '; {0,2}(?:Polaroid )(Tablet)(?: Build|\) AppleWebKit)'
|
3810
4059
|
device_replacement: '$1'
|
3811
4060
|
brand_replacement: 'Polaroid'
|
3812
4061
|
model_replacement: '$1'
|
@@ -3816,7 +4065,7 @@ device_parsers:
|
|
3816
4065
|
# @ref: http://pompmobileshop.com/
|
3817
4066
|
#########
|
3818
4067
|
#~ TODO
|
3819
|
-
- regex: ';
|
4068
|
+
- regex: '; {0,2}(POMP)[ _\-](.{1,200}?) {0,2}(?:Build|[;/\)])'
|
3820
4069
|
device_replacement: '$1 $2'
|
3821
4070
|
brand_replacement: 'Pomp'
|
3822
4071
|
model_replacement: '$2'
|
@@ -3825,11 +4074,11 @@ device_parsers:
|
|
3825
4074
|
# Positivo
|
3826
4075
|
# @ref: http://www.positivoinformatica.com.br/www/pessoal/tablet-ypy/
|
3827
4076
|
#########
|
3828
|
-
- regex: ';
|
4077
|
+
- regex: '; {0,2}(TB07STA|TB10STA|TB07FTA|TB10FTA)(?: Build|\) AppleWebKit)'
|
3829
4078
|
device_replacement: '$1'
|
3830
4079
|
brand_replacement: 'Positivo'
|
3831
4080
|
model_replacement: '$1'
|
3832
|
-
- regex: ';
|
4081
|
+
- regex: '; {0,2}(?:Positivo |)((?:YPY|Ypy)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3833
4082
|
device_replacement: '$1'
|
3834
4083
|
brand_replacement: 'Positivo'
|
3835
4084
|
model_replacement: '$1'
|
@@ -3839,15 +4088,15 @@ device_parsers:
|
|
3839
4088
|
# @ref: http://www.pointofview-online.com/default2.php
|
3840
4089
|
# @TODO: Smartphone Models MOB-3515, MOB-5045-B missing
|
3841
4090
|
#########
|
3842
|
-
- regex: ';
|
4091
|
+
- regex: '; {0,2}(MOB-[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3843
4092
|
device_replacement: '$1'
|
3844
4093
|
brand_replacement: 'POV'
|
3845
4094
|
model_replacement: '$1'
|
3846
|
-
- regex: ';
|
4095
|
+
- regex: '; {0,2}POV[ _\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3847
4096
|
device_replacement: 'POV $1'
|
3848
4097
|
brand_replacement: 'POV'
|
3849
4098
|
model_replacement: '$1'
|
3850
|
-
- regex: ';
|
4099
|
+
- regex: '; {0,2}((?:TAB-PLAYTAB|TAB-PROTAB|PROTAB|PlayTabPro|Mobii[ _\-]|TAB-P)[^;/]*)(?: Build|\) AppleWebKit)'
|
3851
4100
|
device_replacement: 'POV $1'
|
3852
4101
|
brand_replacement: 'POV'
|
3853
4102
|
model_replacement: '$1'
|
@@ -3857,7 +4106,7 @@ device_parsers:
|
|
3857
4106
|
# @ref: http://www.prestigio.com/catalogue/MultiPhones
|
3858
4107
|
# @ref: http://www.prestigio.com/catalogue/MultiPads
|
3859
4108
|
#########
|
3860
|
-
- regex: ';
|
4109
|
+
- regex: '; {0,2}(?:Prestigio |)((?:PAP|PMP)\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3861
4110
|
device_replacement: 'Prestigio $1'
|
3862
4111
|
brand_replacement: 'Prestigio'
|
3863
4112
|
model_replacement: '$1'
|
@@ -3866,7 +4115,7 @@ device_parsers:
|
|
3866
4115
|
# Proscan
|
3867
4116
|
# @ref: http://www.proscanvideo.com/products-search.asp?itemClass=TABLET&itemnmbr=
|
3868
4117
|
#########
|
3869
|
-
- regex: ';
|
4118
|
+
- regex: '; {0,2}(PLT[0-9]{4}.{0,200}?)(?: Build|\) AppleWebKit)'
|
3870
4119
|
device_replacement: '$1'
|
3871
4120
|
brand_replacement: 'Proscan'
|
3872
4121
|
model_replacement: '$1'
|
@@ -3875,15 +4124,15 @@ device_parsers:
|
|
3875
4124
|
# QMobile
|
3876
4125
|
# @ref: http://www.qmobile.com.pk/
|
3877
4126
|
#########
|
3878
|
-
- regex: ';
|
4127
|
+
- regex: '; {0,2}(A2|A5|A8|A900)_?(Classic|)(?: Build|\) AppleWebKit)'
|
3879
4128
|
device_replacement: '$1 $2'
|
3880
4129
|
brand_replacement: 'Qmobile'
|
3881
4130
|
model_replacement: '$1 $2'
|
3882
|
-
- regex: ';
|
4131
|
+
- regex: '; {0,2}(Q[Mm]obile)_([^_]+)_([^_]+?)(?: Build|\) AppleWebKit)'
|
3883
4132
|
device_replacement: 'Qmobile $2 $3'
|
3884
4133
|
brand_replacement: 'Qmobile'
|
3885
4134
|
model_replacement: '$2 $3'
|
3886
|
-
- regex: ';
|
4135
|
+
- regex: '; {0,2}(Q\-?[Mm]obile)[_ ](A[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3887
4136
|
device_replacement: 'Qmobile $2'
|
3888
4137
|
brand_replacement: 'Qmobile'
|
3889
4138
|
model_replacement: '$2'
|
@@ -3892,11 +4141,11 @@ device_parsers:
|
|
3892
4141
|
# Qmobilevn
|
3893
4142
|
# @ref: http://qmobile.vn/san-pham.html
|
3894
4143
|
#########
|
3895
|
-
- regex: ';
|
4144
|
+
- regex: '; {0,2}(Q\-Smart)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3896
4145
|
device_replacement: '$1 $2'
|
3897
4146
|
brand_replacement: 'Qmobilevn'
|
3898
4147
|
model_replacement: '$2'
|
3899
|
-
- regex: ';
|
4148
|
+
- regex: '; {0,2}(Q\-?[Mm]obile)[ _\-](S[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3900
4149
|
device_replacement: '$1 $2'
|
3901
4150
|
brand_replacement: 'Qmobilevn'
|
3902
4151
|
model_replacement: '$2'
|
@@ -3905,7 +4154,7 @@ device_parsers:
|
|
3905
4154
|
# Quanta
|
3906
4155
|
# @ref: ?
|
3907
4156
|
#########
|
3908
|
-
- regex: ';
|
4157
|
+
- regex: '; {0,2}(TA1013)(?: Build|\) AppleWebKit)'
|
3909
4158
|
device_replacement: '$1'
|
3910
4159
|
brand_replacement: 'Quanta'
|
3911
4160
|
model_replacement: '$1'
|
@@ -3928,7 +4177,7 @@ device_parsers:
|
|
3928
4177
|
# @ref: http://www.rock-chips.com/a/cn/product/index.html
|
3929
4178
|
# @note: manufacturer sells chipsets - I assume that these UAs are dev-boards
|
3930
4179
|
#########
|
3931
|
-
- regex: ';
|
4180
|
+
- regex: '; {0,2}(RK\d+),?(?: Build|\) AppleWebKit)'
|
3932
4181
|
device_replacement: '$1'
|
3933
4182
|
brand_replacement: 'Rockchip'
|
3934
4183
|
model_replacement: '$1'
|
@@ -3941,55 +4190,55 @@ device_parsers:
|
|
3941
4190
|
# Samsung Android Devices
|
3942
4191
|
# @ref: http://www.samsung.com/us/mobile/cell-phones/all-products
|
3943
4192
|
#########
|
3944
|
-
- regex: ';
|
4193
|
+
- regex: '; {0,2}(SAMSUNG |Samsung |)((?:Galaxy (?:Note II|S\d)|GT-I9082|GT-I9205|GT-N7\d{3}|SM-N9005)[^;/]{0,100})\/?[^;/]{0,50} Build/'
|
3945
4194
|
device_replacement: 'Samsung $1$2'
|
3946
4195
|
brand_replacement: 'Samsung'
|
3947
4196
|
model_replacement: '$2'
|
3948
|
-
- regex: ';
|
4197
|
+
- regex: '; {0,2}(Google |)(Nexus [Ss](?: 4G|)) Build/'
|
3949
4198
|
device_replacement: 'Samsung $1$2'
|
3950
4199
|
brand_replacement: 'Samsung'
|
3951
4200
|
model_replacement: '$2'
|
3952
|
-
- regex: ';
|
4201
|
+
- regex: '; {0,2}(SAMSUNG |Samsung )([^\/]{0,50})\/[^ ]{0,50} Build/'
|
3953
4202
|
device_replacement: 'Samsung $2'
|
3954
4203
|
brand_replacement: 'Samsung'
|
3955
4204
|
model_replacement: '$2'
|
3956
|
-
- regex: ';
|
4205
|
+
- regex: '; {0,2}(Galaxy(?: Ace| Nexus| S ?II+|Nexus S| with MCR 1.2| Mini Plus 4G|)) Build/'
|
3957
4206
|
device_replacement: 'Samsung $1'
|
3958
4207
|
brand_replacement: 'Samsung'
|
3959
4208
|
model_replacement: '$1'
|
3960
|
-
- regex: ';
|
4209
|
+
- regex: '; {0,2}(SAMSUNG[ _\-]|)(?:SAMSUNG[ _\-])([^;/]{1,100}) Build'
|
3961
4210
|
device_replacement: 'Samsung $2'
|
3962
4211
|
brand_replacement: 'Samsung'
|
3963
4212
|
model_replacement: '$2'
|
3964
|
-
- regex: ';
|
4213
|
+
- regex: '; {0,2}(SAMSUNG-|)(GT\-[BINPS]\d{4}[^\/]{0,50})(\/[^ ]{0,50}) Build'
|
3965
4214
|
device_replacement: 'Samsung $1$2$3'
|
3966
4215
|
brand_replacement: 'Samsung'
|
3967
4216
|
model_replacement: '$2'
|
3968
|
-
- regex: '(?:;
|
4217
|
+
- regex: '(?:; {0,2}|^)((?:GT\-[BIiNPS]\d{4}|I9\d{2}0[A-Za-z\+]?\b)[^;/\)]*?)(?:Build|Linux|MIUI|[;/\)])'
|
3969
4218
|
device_replacement: 'Samsung $1'
|
3970
4219
|
brand_replacement: 'Samsung'
|
3971
4220
|
model_replacement: '$1'
|
3972
|
-
- regex: '; (SAMSUNG-)([A-Za-z0-9\-]
|
4221
|
+
- regex: '; (SAMSUNG-)([A-Za-z0-9\-]{0,50}).{0,200} Build/'
|
3973
4222
|
device_replacement: 'Samsung $1$2'
|
3974
4223
|
brand_replacement: 'Samsung'
|
3975
4224
|
model_replacement: '$2'
|
3976
|
-
- regex: ';
|
4225
|
+
- regex: '; {0,2}((?:SCH|SGH|SHV|SHW|SPH|SC|SM)\-[A-Za-z0-9 ]{1,50})(/?[^ ]*|) Build'
|
3977
4226
|
device_replacement: 'Samsung $1'
|
3978
4227
|
brand_replacement: 'Samsung'
|
3979
4228
|
model_replacement: '$1'
|
3980
|
-
- regex: ';
|
4229
|
+
- regex: '; {0,2}((?:SC)\-[A-Za-z0-9 ]{1,50})(/?[^ ]*|)\)'
|
3981
4230
|
device_replacement: 'Samsung $1'
|
3982
4231
|
brand_replacement: 'Samsung'
|
3983
4232
|
model_replacement: '$1'
|
3984
|
-
- regex: ' ((?:SCH)\-[A-Za-z0-9 ]
|
4233
|
+
- regex: ' ((?:SCH)\-[A-Za-z0-9 ]{1,50})(/?[^ ]*|) Build'
|
3985
4234
|
device_replacement: 'Samsung $1'
|
3986
4235
|
brand_replacement: 'Samsung'
|
3987
4236
|
model_replacement: '$1'
|
3988
|
-
- regex: ';
|
4237
|
+
- regex: '; {0,2}(Behold ?(?:2|II)|YP\-G[^;/]{1,100}|EK-GC100|SCL21|I9300) Build'
|
3989
4238
|
device_replacement: 'Samsung $1'
|
3990
4239
|
brand_replacement: 'Samsung'
|
3991
4240
|
model_replacement: '$1'
|
3992
|
-
- regex: ';
|
4241
|
+
- regex: '; {0,2}((?:SCH|SGH|SHV|SHW|SPH|SC|SM)\-[A-Za-z0-9]{5,6})[\)]'
|
3993
4242
|
device_replacement: 'Samsung $1'
|
3994
4243
|
brand_replacement: 'Samsung'
|
3995
4244
|
model_replacement: '$1'
|
@@ -3999,11 +4248,11 @@ device_parsers:
|
|
3999
4248
|
# @ref: http://www.sharp-phone.com/en/index.html
|
4000
4249
|
# @ref: http://www.android.com/devices/?country=all&m=sharp
|
4001
4250
|
#########
|
4002
|
-
- regex: ';
|
4251
|
+
- regex: '; {0,2}(SH\-?\d\d[^;/]{1,100}|SBM\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4003
4252
|
device_replacement: '$1'
|
4004
4253
|
brand_replacement: 'Sharp'
|
4005
4254
|
model_replacement: '$1'
|
4006
|
-
- regex: ';
|
4255
|
+
- regex: '; {0,2}(SHARP[ -])([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4007
4256
|
device_replacement: '$1$2'
|
4008
4257
|
brand_replacement: 'Sharp'
|
4009
4258
|
model_replacement: '$2'
|
@@ -4012,15 +4261,15 @@ device_parsers:
|
|
4012
4261
|
# Simvalley
|
4013
4262
|
# @ref: http://www.simvalley-mobile.de/
|
4014
4263
|
#########
|
4015
|
-
- regex: ';
|
4264
|
+
- regex: '; {0,2}(SPX[_\-]\d[^;/]*)(?: Build|\) AppleWebKit)'
|
4016
4265
|
device_replacement: '$1'
|
4017
4266
|
brand_replacement: 'Simvalley'
|
4018
4267
|
model_replacement: '$1'
|
4019
|
-
- regex: ';
|
4268
|
+
- regex: '; {0,2}(SX7\-PEARL\.GmbH)(?: Build|\) AppleWebKit)'
|
4020
4269
|
device_replacement: '$1'
|
4021
4270
|
brand_replacement: 'Simvalley'
|
4022
4271
|
model_replacement: '$1'
|
4023
|
-
- regex: ';
|
4272
|
+
- regex: '; {0,2}(SP[T]?\-\d{2}[^;/]*)(?: Build|\) AppleWebKit)'
|
4024
4273
|
device_replacement: '$1'
|
4025
4274
|
brand_replacement: 'Simvalley'
|
4026
4275
|
model_replacement: '$1'
|
@@ -4030,7 +4279,7 @@ device_parsers:
|
|
4030
4279
|
# @ref: http://www.sk-w.com/phone/phone_list.jsp
|
4031
4280
|
# @ref: http://www.android.com/devices/?country=all&m=sk-telesys
|
4032
4281
|
#########
|
4033
|
-
- regex: ';
|
4282
|
+
- regex: '; {0,2}(SK\-.{0,200}?)(?: Build|\) AppleWebKit)'
|
4034
4283
|
device_replacement: '$1'
|
4035
4284
|
brand_replacement: 'SKtelesys'
|
4036
4285
|
model_replacement: '$1'
|
@@ -4039,11 +4288,11 @@ device_parsers:
|
|
4039
4288
|
# Skytex
|
4040
4289
|
# @ref: http://skytex.com/android
|
4041
4290
|
#########
|
4042
|
-
- regex: ';
|
4291
|
+
- regex: '; {0,2}(?:SKYTEX|SX)-([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4043
4292
|
device_replacement: '$1'
|
4044
4293
|
brand_replacement: 'Skytex'
|
4045
4294
|
model_replacement: '$1'
|
4046
|
-
- regex: ';
|
4295
|
+
- regex: '; {0,2}(IMAGINE [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4047
4296
|
device_replacement: '$1'
|
4048
4297
|
brand_replacement: 'Skytex'
|
4049
4298
|
model_replacement: '$1'
|
@@ -4053,7 +4302,7 @@ device_parsers:
|
|
4053
4302
|
# @ref: http://en.smartdevices.com.cn/Products/
|
4054
4303
|
# @models: Z8, X7, U7H, U7, T30, T20, Ten3, V5-II, T7-3G, SmartQ5, K7, S7, Q8, T19, Ten2, Ten, R10, T7, R7, V5, V7, SmartQ7
|
4055
4304
|
#########
|
4056
|
-
- regex: ';
|
4305
|
+
- regex: '; {0,2}(SmartQ) ?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4057
4306
|
device_replacement: '$1 $2'
|
4058
4307
|
brand_replacement: '$1'
|
4059
4308
|
model_replacement: '$2'
|
@@ -4063,7 +4312,7 @@ device_parsers:
|
|
4063
4312
|
# @ref: http://www.smartbitt.com/
|
4064
4313
|
# @missing: SBT Useragents
|
4065
4314
|
#########
|
4066
|
-
- regex: ';
|
4315
|
+
- regex: '; {0,2}(WF7C|WF10C|SBT[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4067
4316
|
device_replacement: '$1'
|
4068
4317
|
brand_replacement: 'Smartbitt'
|
4069
4318
|
model_replacement: '$1'
|
@@ -4072,15 +4321,15 @@ device_parsers:
|
|
4072
4321
|
# Softbank (Operator Branded Devices)
|
4073
4322
|
# @ref: http://www.ipentec.com/document/document.aspx?page=android-useragent
|
4074
4323
|
#########
|
4075
|
-
- regex: ';
|
4324
|
+
- regex: '; {0,2}(SBM(?:003SH|005SH|006SH|007SH|102SH)) Build'
|
4076
4325
|
device_replacement: '$1'
|
4077
4326
|
brand_replacement: 'Sharp'
|
4078
4327
|
model_replacement: '$1'
|
4079
|
-
- regex: ';
|
4328
|
+
- regex: '; {0,2}(003P|101P|101P11C|102P) Build'
|
4080
4329
|
device_replacement: '$1'
|
4081
4330
|
brand_replacement: 'Panasonic'
|
4082
4331
|
model_replacement: '$1'
|
4083
|
-
- regex: ';
|
4332
|
+
- regex: '; {0,2}(00\dZ) Build/'
|
4084
4333
|
device_replacement: '$1'
|
4085
4334
|
brand_replacement: 'ZTE'
|
4086
4335
|
model_replacement: '$1'
|
@@ -4088,11 +4337,11 @@ device_parsers:
|
|
4088
4337
|
device_replacement: '$1'
|
4089
4338
|
brand_replacement: 'HTC'
|
4090
4339
|
model_replacement: '$1'
|
4091
|
-
- regex: ';
|
4340
|
+
- regex: '; {0,2}(001HT|X06HT) Build'
|
4092
4341
|
device_replacement: '$1'
|
4093
4342
|
brand_replacement: 'HTC'
|
4094
4343
|
model_replacement: '$1'
|
4095
|
-
- regex: ';
|
4344
|
+
- regex: '; {0,2}(201M) Build'
|
4096
4345
|
device_replacement: '$1'
|
4097
4346
|
brand_replacement: 'Motorola'
|
4098
4347
|
model_replacement: 'XT902'
|
@@ -4102,11 +4351,11 @@ device_parsers:
|
|
4102
4351
|
# @ref: http://www.trekstor.co.uk/surftabs-en.html
|
4103
4352
|
# @note: Must come before SonyEricsson
|
4104
4353
|
#########
|
4105
|
-
- regex: ';
|
4354
|
+
- regex: '; {0,2}(ST\d{4}.{0,200})Build/ST'
|
4106
4355
|
device_replacement: 'Trekstor $1'
|
4107
4356
|
brand_replacement: 'Trekstor'
|
4108
4357
|
model_replacement: '$1'
|
4109
|
-
- regex: ';
|
4358
|
+
- regex: '; {0,2}(ST\d{4}.{0,200}?)(?: Build|\) AppleWebKit)'
|
4110
4359
|
device_replacement: 'Trekstor $1'
|
4111
4360
|
brand_replacement: 'Trekstor'
|
4112
4361
|
model_replacement: '$1'
|
@@ -4118,16 +4367,16 @@ device_parsers:
|
|
4118
4367
|
# @TODO: type!
|
4119
4368
|
#########
|
4120
4369
|
# android matchers
|
4121
|
-
- regex: ';
|
4370
|
+
- regex: '; {0,2}(Sony ?Ericsson ?)([^;/]{1,100}) Build'
|
4122
4371
|
device_replacement: '$1$2'
|
4123
4372
|
brand_replacement: 'SonyEricsson'
|
4124
4373
|
model_replacement: '$2'
|
4125
|
-
- regex: ';
|
4374
|
+
- regex: '; {0,2}((?:SK|ST|E|X|LT|MK|MT|WT)\d{2}[a-z0-9]*(?:-o|)|R800i|U20i) Build'
|
4126
4375
|
device_replacement: '$1'
|
4127
4376
|
brand_replacement: 'SonyEricsson'
|
4128
4377
|
model_replacement: '$1'
|
4129
4378
|
# TODO X\d+ is wrong
|
4130
|
-
- regex: ';
|
4379
|
+
- regex: '; {0,2}(Xperia (?:A8|Arc|Acro|Active|Live with Walkman|Mini|Neo|Play|Pro|Ray|X\d+)[^;/]{0,50}) Build'
|
4131
4380
|
regex_flag: 'i'
|
4132
4381
|
device_replacement: '$1'
|
4133
4382
|
brand_replacement: 'SonyEricsson'
|
@@ -4139,31 +4388,31 @@ device_parsers:
|
|
4139
4388
|
# @ref: http://www.sonymobile.com/global-en/products/phones/
|
4140
4389
|
# @ref: http://www.sony.jp/tablet/
|
4141
4390
|
#########
|
4142
|
-
- regex: '; Sony (Tablet[^;/]
|
4391
|
+
- regex: '; Sony (Tablet[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4143
4392
|
device_replacement: 'Sony $1'
|
4144
4393
|
brand_replacement: 'Sony'
|
4145
4394
|
model_replacement: '$1'
|
4146
|
-
- regex: '; Sony ([^;/]
|
4395
|
+
- regex: '; Sony ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4147
4396
|
device_replacement: 'Sony $1'
|
4148
4397
|
brand_replacement: 'Sony'
|
4149
4398
|
model_replacement: '$1'
|
4150
|
-
- regex: ';
|
4399
|
+
- regex: '; {0,2}(Sony)([A-Za-z0-9\-]+)(?: Build|\) AppleWebKit)'
|
4151
4400
|
device_replacement: '$1 $2'
|
4152
4401
|
brand_replacement: '$1'
|
4153
4402
|
model_replacement: '$2'
|
4154
|
-
- regex: ';
|
4403
|
+
- regex: '; {0,2}(Xperia [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4155
4404
|
device_replacement: '$1'
|
4156
4405
|
brand_replacement: 'Sony'
|
4157
4406
|
model_replacement: '$1'
|
4158
|
-
- regex: ';
|
4407
|
+
- regex: '; {0,2}(C(?:1[0-9]|2[0-9]|53|55|6[0-9])[0-9]{2}|D[25]\d{3}|D6[56]\d{2})(?: Build|\) AppleWebKit)'
|
4159
4408
|
device_replacement: '$1'
|
4160
4409
|
brand_replacement: 'Sony'
|
4161
4410
|
model_replacement: '$1'
|
4162
|
-
- regex: ';
|
4411
|
+
- regex: '; {0,2}(SGP\d{3}|SGPT\d{2})(?: Build|\) AppleWebKit)'
|
4163
4412
|
device_replacement: '$1'
|
4164
4413
|
brand_replacement: 'Sony'
|
4165
4414
|
model_replacement: '$1'
|
4166
|
-
- regex: ';
|
4415
|
+
- regex: '; {0,2}(NW-Z1000Series)(?: Build|\) AppleWebKit)'
|
4167
4416
|
device_replacement: '$1'
|
4168
4417
|
brand_replacement: 'Sony'
|
4169
4418
|
model_replacement: '$1'
|
@@ -4186,7 +4435,7 @@ device_parsers:
|
|
4186
4435
|
# Spice
|
4187
4436
|
# @ref: http://www.spicemobilephones.co.in/
|
4188
4437
|
#########
|
4189
|
-
- regex: ';
|
4438
|
+
- regex: '; {0,2}((?:CSL_Spice|Spice|SPICE|CSL)[ _\-]?|)([Mm][Ii])([ _\-]|)(\d{3}[^;/]*)(?: Build|\) AppleWebKit)'
|
4190
4439
|
device_replacement: '$1$2$3$4'
|
4191
4440
|
brand_replacement: 'Spice'
|
4192
4441
|
model_replacement: 'Mi$4'
|
@@ -4195,7 +4444,7 @@ device_parsers:
|
|
4195
4444
|
# Sprint (Operator Branded Devices)
|
4196
4445
|
# @ref:
|
4197
4446
|
#########
|
4198
|
-
- regex: ';
|
4447
|
+
- regex: '; {0,2}(Sprint )(.{1,200}?) {0,2}(?:Build|[;/])'
|
4199
4448
|
device_replacement: '$1$2'
|
4200
4449
|
brand_replacement: 'Sprint'
|
4201
4450
|
model_replacement: '$2'
|
@@ -4208,7 +4457,7 @@ device_parsers:
|
|
4208
4457
|
# Tagi
|
4209
4458
|
# @ref: ??
|
4210
4459
|
#########
|
4211
|
-
- regex: ';
|
4460
|
+
- regex: '; {0,2}(TAGI[ ]?)(MID) ?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4212
4461
|
device_replacement: '$1$2$3'
|
4213
4462
|
brand_replacement: 'Tagi'
|
4214
4463
|
model_replacement: '$2$3'
|
@@ -4217,7 +4466,7 @@ device_parsers:
|
|
4217
4466
|
# Tecmobile
|
4218
4467
|
# @ref: http://www.tecmobile.com/
|
4219
4468
|
#########
|
4220
|
-
- regex: ';
|
4469
|
+
- regex: '; {0,2}(Oyster500|Opal 800)(?: Build|\) AppleWebKit)'
|
4221
4470
|
device_replacement: 'Tecmobile $1'
|
4222
4471
|
brand_replacement: 'Tecmobile'
|
4223
4472
|
model_replacement: '$1'
|
@@ -4226,7 +4475,7 @@ device_parsers:
|
|
4226
4475
|
# Tecno
|
4227
4476
|
# @ref: www.tecno-mobile.com/
|
4228
4477
|
#########
|
4229
|
-
- regex: ';
|
4478
|
+
- regex: '; {0,2}(TECNO[ _])([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4230
4479
|
device_replacement: '$1$2'
|
4231
4480
|
brand_replacement: 'Tecno'
|
4232
4481
|
model_replacement: '$2'
|
@@ -4235,7 +4484,7 @@ device_parsers:
|
|
4235
4484
|
# Telechips, Techvision evaluation boards
|
4236
4485
|
# @ref:
|
4237
4486
|
#########
|
4238
|
-
- regex: ';
|
4487
|
+
- regex: '; {0,2}Android for (Telechips|Techvision) ([^ ]+) '
|
4239
4488
|
regex_flag: 'i'
|
4240
4489
|
device_replacement: '$1 $2'
|
4241
4490
|
brand_replacement: '$1'
|
@@ -4246,7 +4495,7 @@ device_parsers:
|
|
4246
4495
|
# @ref: http://www.telstra.com.au/home-phone/thub-2/
|
4247
4496
|
# @ref: https://support.google.com/googleplay/answer/1727131?hl=en
|
4248
4497
|
#########
|
4249
|
-
- regex: ';
|
4498
|
+
- regex: '; {0,2}(T-Hub2)(?: Build|\) AppleWebKit)'
|
4250
4499
|
device_replacement: '$1'
|
4251
4500
|
brand_replacement: 'Telstra'
|
4252
4501
|
model_replacement: '$1'
|
@@ -4255,7 +4504,7 @@ device_parsers:
|
|
4255
4504
|
# Terra
|
4256
4505
|
# @ref: http://www.wortmann.de/
|
4257
4506
|
#########
|
4258
|
-
- regex: ';
|
4507
|
+
- regex: '; {0,2}(PAD) ?(100[12])(?: Build|\) AppleWebKit)'
|
4259
4508
|
device_replacement: 'Terra $1$2'
|
4260
4509
|
brand_replacement: 'Terra'
|
4261
4510
|
model_replacement: '$1$2'
|
@@ -4264,7 +4513,7 @@ device_parsers:
|
|
4264
4513
|
# Texet
|
4265
4514
|
# @ref: http://www.texet.ru/tablet/
|
4266
4515
|
#########
|
4267
|
-
- regex: ';
|
4516
|
+
- regex: '; {0,2}(T[BM]-\d{3}[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4268
4517
|
device_replacement: '$1'
|
4269
4518
|
brand_replacement: 'Texet'
|
4270
4519
|
model_replacement: '$1'
|
@@ -4273,11 +4522,11 @@ device_parsers:
|
|
4273
4522
|
# Thalia
|
4274
4523
|
# @ref: http://www.thalia.de/shop/tolino-shine-ereader/show/
|
4275
4524
|
#########
|
4276
|
-
- regex: ';
|
4525
|
+
- regex: '; {0,2}(tolino [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4277
4526
|
device_replacement: '$1'
|
4278
4527
|
brand_replacement: 'Thalia'
|
4279
4528
|
model_replacement: '$1'
|
4280
|
-
- regex: ';
|
4529
|
+
- regex: '; {0,2}Build/.{0,200} (TOLINO_BROWSER)'
|
4281
4530
|
device_replacement: '$1'
|
4282
4531
|
brand_replacement: 'Thalia'
|
4283
4532
|
model_replacement: 'Tolino Shine'
|
@@ -4287,11 +4536,11 @@ device_parsers:
|
|
4287
4536
|
# @ref: http://en.thl.com.cn/Mobile
|
4288
4537
|
# @ref: http://thlmobilestore.com
|
4289
4538
|
#########
|
4290
|
-
- regex: ';
|
4539
|
+
- regex: '; {0,2}(?:CJ[ -])?(ThL|THL)[ -]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4291
4540
|
device_replacement: '$1 $2'
|
4292
4541
|
brand_replacement: 'Thl'
|
4293
4542
|
model_replacement: '$2'
|
4294
|
-
- regex: ';
|
4543
|
+
- regex: '; {0,2}(T100|T200|T5|W100|W200|W8s)(?: Build|\) AppleWebKit)'
|
4295
4544
|
device_replacement: '$1'
|
4296
4545
|
brand_replacement: 'Thl'
|
4297
4546
|
model_replacement: '$1'
|
@@ -4300,28 +4549,28 @@ device_parsers:
|
|
4300
4549
|
# T-Mobile (Operator Branded Devices)
|
4301
4550
|
#########
|
4302
4551
|
# @ref: https://en.wikipedia.org/wiki/HTC_Hero
|
4303
|
-
- regex: ';
|
4552
|
+
- regex: '; {0,2}(T-Mobile[ _]G2[ _]Touch) Build'
|
4304
4553
|
device_replacement: '$1'
|
4305
4554
|
brand_replacement: 'HTC'
|
4306
4555
|
model_replacement: 'Hero'
|
4307
4556
|
# @ref: https://en.wikipedia.org/wiki/HTC_Desire_Z
|
4308
|
-
- regex: ';
|
4557
|
+
- regex: '; {0,2}(T-Mobile[ _]G2) Build'
|
4309
4558
|
device_replacement: '$1'
|
4310
4559
|
brand_replacement: 'HTC'
|
4311
4560
|
model_replacement: 'Desire Z'
|
4312
|
-
- regex: ';
|
4561
|
+
- regex: '; {0,2}(T-Mobile myTouch Q) Build'
|
4313
4562
|
device_replacement: '$1'
|
4314
4563
|
brand_replacement: 'Huawei'
|
4315
4564
|
model_replacement: 'U8730'
|
4316
|
-
- regex: ';
|
4565
|
+
- regex: '; {0,2}(T-Mobile myTouch) Build'
|
4317
4566
|
device_replacement: '$1'
|
4318
4567
|
brand_replacement: 'Huawei'
|
4319
4568
|
model_replacement: 'U8680'
|
4320
|
-
- regex: ';
|
4569
|
+
- regex: '; {0,2}(T-Mobile_Espresso) Build'
|
4321
4570
|
device_replacement: '$1'
|
4322
4571
|
brand_replacement: 'HTC'
|
4323
4572
|
model_replacement: 'Espresso'
|
4324
|
-
- regex: ';
|
4573
|
+
- regex: '; {0,2}(T-Mobile G1) Build'
|
4325
4574
|
device_replacement: '$1'
|
4326
4575
|
brand_replacement: 'HTC'
|
4327
4576
|
model_replacement: 'Dream'
|
@@ -4329,11 +4578,11 @@ device_parsers:
|
|
4329
4578
|
device_replacement: '$1$2 $3 $4'
|
4330
4579
|
brand_replacement: 'HTC'
|
4331
4580
|
model_replacement: '$2 $3 $4'
|
4332
|
-
- regex: '\b(T-Mobile)_([^_]+)_(
|
4581
|
+
- regex: '\b(T-Mobile)_([^_]+)_(.{0,200}) Build'
|
4333
4582
|
device_replacement: '$1 $2 $3'
|
4334
4583
|
brand_replacement: 'Tmobile'
|
4335
4584
|
model_replacement: '$2 $3'
|
4336
|
-
- regex: '\b(T-Mobile)[_ ]?(
|
4585
|
+
- regex: '\b(T-Mobile)[_ ]?(.{0,200}?)Build'
|
4337
4586
|
device_replacement: '$1 $2'
|
4338
4587
|
brand_replacement: 'Tmobile'
|
4339
4588
|
model_replacement: '$2'
|
@@ -4351,7 +4600,7 @@ device_parsers:
|
|
4351
4600
|
# Tooky
|
4352
4601
|
# @ref: http://www.tookymobile.com/
|
4353
4602
|
#########
|
4354
|
-
- regex: '
|
4603
|
+
- regex: ' ?(TOOKY)[ _\-]([^;/]{1,100}) ?(?:Build|;)'
|
4355
4604
|
regex_flag: 'i'
|
4356
4605
|
device_replacement: '$1 $2'
|
4357
4606
|
brand_replacement: 'Tooky'
|
@@ -4366,11 +4615,11 @@ device_parsers:
|
|
4366
4615
|
device_replacement: '$1'
|
4367
4616
|
brand_replacement: 'Toshiba'
|
4368
4617
|
model_replacement: 'Folio 100'
|
4369
|
-
- regex: ';
|
4618
|
+
- regex: '; {0,2}([Ff]olio ?100)(?: Build|\) AppleWebKit)'
|
4370
4619
|
device_replacement: '$1'
|
4371
4620
|
brand_replacement: 'Toshiba'
|
4372
4621
|
model_replacement: 'Folio 100'
|
4373
|
-
- regex: ';
|
4622
|
+
- regex: '; {0,2}(AT[0-9]{2,3}(?:\-A|LE\-A|PE\-A|SE|a|)|AT7-A|AT1S0|Hikari-iFrame/WDPF-[^;/]{1,100}|THRiVE|Thrive)(?: Build|\) AppleWebKit)'
|
4374
4623
|
device_replacement: 'Toshiba $1'
|
4375
4624
|
brand_replacement: 'Toshiba'
|
4376
4625
|
model_replacement: '$1'
|
@@ -4379,12 +4628,12 @@ device_parsers:
|
|
4379
4628
|
# Touchmate
|
4380
4629
|
# @ref: http://touchmatepc.com/new/
|
4381
4630
|
#########
|
4382
|
-
- regex: ';
|
4631
|
+
- regex: '; {0,2}(TM-MID\d+[^;/]{1,50}|TOUCHMATE|MID-750)(?: Build|\) AppleWebKit)'
|
4383
4632
|
device_replacement: '$1'
|
4384
4633
|
brand_replacement: 'Touchmate'
|
4385
4634
|
model_replacement: '$1'
|
4386
4635
|
# @todo: needs verification user-agents missing
|
4387
|
-
- regex: ';
|
4636
|
+
- regex: '; {0,2}(TM-SM\d+[^;/]{1,50}?)(?: Build|\) AppleWebKit)'
|
4388
4637
|
device_replacement: '$1'
|
4389
4638
|
brand_replacement: 'Touchmate'
|
4390
4639
|
model_replacement: '$1'
|
@@ -4393,11 +4642,11 @@ device_parsers:
|
|
4393
4642
|
# Treq
|
4394
4643
|
# @ref: http://www.treq.co.id/product
|
4395
4644
|
#########
|
4396
|
-
- regex: ';
|
4645
|
+
- regex: '; {0,2}(A10 [Bb]asic2?)(?: Build|\) AppleWebKit)'
|
4397
4646
|
device_replacement: '$1'
|
4398
4647
|
brand_replacement: 'Treq'
|
4399
4648
|
model_replacement: '$1'
|
4400
|
-
- regex: ';
|
4649
|
+
- regex: '; {0,2}(TREQ[ _\-])([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4401
4650
|
regex_flag: 'i'
|
4402
4651
|
device_replacement: '$1$2'
|
4403
4652
|
brand_replacement: 'Treq'
|
@@ -4409,21 +4658,40 @@ device_parsers:
|
|
4409
4658
|
# @models: A936|A603|X-5|X-3
|
4410
4659
|
#########
|
4411
4660
|
# @todo: guessed markers
|
4412
|
-
- regex: ';
|
4661
|
+
- regex: '; {0,2}(X-?5|X-?3)(?: Build|\) AppleWebKit)'
|
4413
4662
|
device_replacement: '$1'
|
4414
4663
|
brand_replacement: 'Umeox'
|
4415
4664
|
model_replacement: '$1'
|
4416
4665
|
# @todo: guessed markers
|
4417
|
-
- regex: ';
|
4666
|
+
- regex: '; {0,2}(A502\+?|A936|A603|X1|X2)(?: Build|\) AppleWebKit)'
|
4418
4667
|
device_replacement: '$1'
|
4419
4668
|
brand_replacement: 'Umeox'
|
4420
4669
|
model_replacement: '$1'
|
4421
4670
|
|
4671
|
+
#########
|
4672
|
+
# Vernee
|
4673
|
+
# @ref: http://vernee.cc/
|
4674
|
+
# @models: Thor - Thor E
|
4675
|
+
#########
|
4676
|
+
- regex: '; thor Build/'
|
4677
|
+
device_replacement: 'Thor'
|
4678
|
+
brand_replacement: 'Vernee'
|
4679
|
+
model_replacement: 'Thor'
|
4680
|
+
# Regex to modidy for Thor Plus (don't find example UA)
|
4681
|
+
- regex: '; Thor (E)? Build/'
|
4682
|
+
device_replacement: 'Thor $1'
|
4683
|
+
brand_replacement: 'Vernee'
|
4684
|
+
model_replacement: 'Thor'
|
4685
|
+
- regex: '; Apollo Lite Build/'
|
4686
|
+
device_replacement: 'Apollo Lite'
|
4687
|
+
brand_replacement: 'Vernee'
|
4688
|
+
model_replacement: 'Apollo'
|
4689
|
+
|
4422
4690
|
#########
|
4423
4691
|
# Versus
|
4424
4692
|
# @ref: http://versusuk.com/support.html
|
4425
4693
|
#########
|
4426
|
-
- regex: '(TOUCH(?:TAB|PAD)
|
4694
|
+
- regex: '(TOUCH(?:TAB|PAD).{1,200}?)(?: Build|\) AppleWebKit)'
|
4427
4695
|
regex_flag: 'i'
|
4428
4696
|
device_replacement: 'Versus $1'
|
4429
4697
|
brand_replacement: 'Versus'
|
@@ -4433,7 +4701,7 @@ device_parsers:
|
|
4433
4701
|
# Vertu
|
4434
4702
|
# @ref: http://www.vertu.com/
|
4435
4703
|
#########
|
4436
|
-
- regex: '(VERTU) ([^;/]
|
4704
|
+
- regex: '(VERTU) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4437
4705
|
device_replacement: '$1 $2'
|
4438
4706
|
brand_replacement: 'Vertu'
|
4439
4707
|
model_replacement: '$2'
|
@@ -4442,7 +4710,7 @@ device_parsers:
|
|
4442
4710
|
# Videocon
|
4443
4711
|
# @ref: http://www.videoconmobiles.com
|
4444
4712
|
#########
|
4445
|
-
- regex: ';
|
4713
|
+
- regex: '; {0,2}(Videocon)[ _\-]([^;/]{1,100}?) {0,2}(?:Build|;)'
|
4446
4714
|
device_replacement: '$1 $2'
|
4447
4715
|
brand_replacement: 'Videocon'
|
4448
4716
|
model_replacement: '$2'
|
@@ -4455,15 +4723,15 @@ device_parsers:
|
|
4455
4723
|
# Viewsonic
|
4456
4724
|
# @ref: http://viewsonic.com
|
4457
4725
|
#########
|
4458
|
-
- regex: ';
|
4726
|
+
- regex: '; {0,2}((?:ViewPad|ViewPhone|VSD)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4459
4727
|
device_replacement: '$1'
|
4460
4728
|
brand_replacement: 'Viewsonic'
|
4461
4729
|
model_replacement: '$1'
|
4462
|
-
- regex: ';
|
4730
|
+
- regex: '; {0,2}(ViewSonic-)([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4463
4731
|
device_replacement: '$1$2'
|
4464
4732
|
brand_replacement: 'Viewsonic'
|
4465
4733
|
model_replacement: '$2'
|
4466
|
-
- regex: ';
|
4734
|
+
- regex: '; {0,2}(GTablet.{0,200}?)(?: Build|\) AppleWebKit)'
|
4467
4735
|
device_replacement: '$1'
|
4468
4736
|
brand_replacement: 'Viewsonic'
|
4469
4737
|
model_replacement: '$1'
|
@@ -4472,7 +4740,7 @@ device_parsers:
|
|
4472
4740
|
# vivo
|
4473
4741
|
# @ref: http://vivo.cn/
|
4474
4742
|
#########
|
4475
|
-
- regex: ';
|
4743
|
+
- regex: '; {0,2}([Vv]ivo)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4476
4744
|
device_replacement: '$1 $2'
|
4477
4745
|
brand_replacement: 'vivo'
|
4478
4746
|
model_replacement: '$2'
|
@@ -4481,7 +4749,7 @@ device_parsers:
|
|
4481
4749
|
# Vodafone (Operator Branded Devices)
|
4482
4750
|
# @ref: ??
|
4483
4751
|
#########
|
4484
|
-
- regex: '(Vodafone) (
|
4752
|
+
- regex: '(Vodafone) (.{0,200}?)(?: Build|\) AppleWebKit)'
|
4485
4753
|
device_replacement: '$1 $2'
|
4486
4754
|
brand_replacement: '$1'
|
4487
4755
|
model_replacement: '$2'
|
@@ -4490,7 +4758,7 @@ device_parsers:
|
|
4490
4758
|
# Walton
|
4491
4759
|
# @ref: http://www.waltonbd.com/
|
4492
4760
|
#########
|
4493
|
-
- regex: ';
|
4761
|
+
- regex: '; {0,2}(?:Walton[ _\-]|)(Primo[ _\-][^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4494
4762
|
regex_flag: 'i'
|
4495
4763
|
device_replacement: 'Walton $1'
|
4496
4764
|
brand_replacement: 'Walton'
|
@@ -4500,7 +4768,7 @@ device_parsers:
|
|
4500
4768
|
# Wiko
|
4501
4769
|
# @ref: http://fr.wikomobile.com/collection.php?s=Smartphones
|
4502
4770
|
#########
|
4503
|
-
- regex: ';
|
4771
|
+
- regex: '; {0,2}(?:WIKO[ \-]|)(CINK\+?|BARRY|BLOOM|DARKFULL|DARKMOON|DARKNIGHT|DARKSIDE|FIZZ|HIGHWAY|IGGY|OZZY|RAINBOW|STAIRWAY|SUBLIM|WAX|CINK [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4504
4772
|
regex_flag: 'i'
|
4505
4773
|
device_replacement: 'Wiko $1'
|
4506
4774
|
brand_replacement: 'Wiko'
|
@@ -4510,7 +4778,7 @@ device_parsers:
|
|
4510
4778
|
# WellcoM
|
4511
4779
|
# @ref: ??
|
4512
4780
|
#########
|
4513
|
-
- regex: ';
|
4781
|
+
- regex: '; {0,2}WellcoM-([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4514
4782
|
device_replacement: 'Wellcom $1'
|
4515
4783
|
brand_replacement: 'Wellcom'
|
4516
4784
|
model_replacement: '$1'
|
@@ -4528,7 +4796,7 @@ device_parsers:
|
|
4528
4796
|
# Wolfgang
|
4529
4797
|
# @ref: http://wolfgangmobile.com/
|
4530
4798
|
#########
|
4531
|
-
- regex: ';
|
4799
|
+
- regex: '; {0,2}(AT-AS[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4532
4800
|
device_replacement: 'Wolfgang $1'
|
4533
4801
|
brand_replacement: 'Wolfgang'
|
4534
4802
|
model_replacement: '$1'
|
@@ -4537,7 +4805,7 @@ device_parsers:
|
|
4537
4805
|
# Woxter
|
4538
4806
|
# @ref: http://www.woxter.es/es-es/categories/index
|
4539
4807
|
#########
|
4540
|
-
- regex: ';
|
4808
|
+
- regex: '; {0,2}(?:Woxter|Wxt) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4541
4809
|
device_replacement: 'Woxter $1'
|
4542
4810
|
brand_replacement: 'Woxter'
|
4543
4811
|
model_replacement: '$1'
|
@@ -4546,7 +4814,7 @@ device_parsers:
|
|
4546
4814
|
# Yarvik Zania
|
4547
4815
|
# @ref: http://yarvik.com
|
4548
4816
|
#########
|
4549
|
-
- regex: ';
|
4817
|
+
- regex: '; {0,2}(?:Xenta |Luna |)(TAB[234][0-9]{2}|TAB0[78]-\d{3}|TAB0?9-\d{3}|TAB1[03]-\d{3}|SMP\d{2}-\d{3})(?: Build|\) AppleWebKit)'
|
4550
4818
|
device_replacement: 'Yarvik $1'
|
4551
4819
|
brand_replacement: 'Yarvik'
|
4552
4820
|
model_replacement: '$1'
|
@@ -4560,7 +4828,7 @@ device_parsers:
|
|
4560
4828
|
# M778, M7000, M7000AD, M7000NBD, M7001, M7002, M7002KBD, M777, M767,
|
4561
4829
|
# M789, M799, M769, M757, M755, M753, M752, M739, M729, M723, M712, M727
|
4562
4830
|
#########
|
4563
|
-
- regex: ';
|
4831
|
+
- regex: '; {0,2}([A-Z]{2,4})(M\d{3,}[A-Z]{2})([^;\)\/]*)(?: Build|[;\)])'
|
4564
4832
|
device_replacement: 'Yifang $1$2$3'
|
4565
4833
|
brand_replacement: 'Yifang'
|
4566
4834
|
model_replacement: '$2'
|
@@ -4569,19 +4837,19 @@ device_parsers:
|
|
4569
4837
|
# XiaoMi
|
4570
4838
|
# @ref: http://www.xiaomi.com/event/buyphone
|
4571
4839
|
#########
|
4572
|
-
- regex: ';
|
4840
|
+
- regex: '; {0,2}((Mi|MI|HM|MI-ONE|Redmi)[ -](NOTE |Note |)[^;/]*) (Build|MIUI)/'
|
4573
4841
|
device_replacement: 'XiaoMi $1'
|
4574
4842
|
brand_replacement: 'XiaoMi'
|
4575
4843
|
model_replacement: '$1'
|
4576
|
-
- regex: ';
|
4844
|
+
- regex: '; {0,2}((Mi|MI|HM|MI-ONE|Redmi)[ -](NOTE |Note |)[^;/\)]*)'
|
4577
4845
|
device_replacement: 'XiaoMi $1'
|
4578
4846
|
brand_replacement: 'XiaoMi'
|
4579
4847
|
model_replacement: '$1'
|
4580
|
-
- regex: ';
|
4848
|
+
- regex: '; {0,2}(MIX) (Build|MIUI)/'
|
4581
4849
|
device_replacement: 'XiaoMi $1'
|
4582
4850
|
brand_replacement: 'XiaoMi'
|
4583
4851
|
model_replacement: '$1'
|
4584
|
-
- regex: ';
|
4852
|
+
- regex: '; {0,2}((MIX) ([^;/]*)) (Build|MIUI)/'
|
4585
4853
|
device_replacement: 'XiaoMi $1'
|
4586
4854
|
brand_replacement: 'XiaoMi'
|
4587
4855
|
model_replacement: '$1'
|
@@ -4590,17 +4858,17 @@ device_parsers:
|
|
4590
4858
|
# Xolo
|
4591
4859
|
# @ref: http://www.xolo.in/
|
4592
4860
|
#########
|
4593
|
-
- regex: ';
|
4861
|
+
- regex: '; {0,2}XOLO[ _]([^;/]{0,30}tab.{0,30})(?: Build|\) AppleWebKit)'
|
4594
4862
|
regex_flag: 'i'
|
4595
4863
|
device_replacement: 'Xolo $1'
|
4596
4864
|
brand_replacement: 'Xolo'
|
4597
4865
|
model_replacement: '$1'
|
4598
|
-
- regex: ';
|
4866
|
+
- regex: '; {0,2}XOLO[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4599
4867
|
regex_flag: 'i'
|
4600
4868
|
device_replacement: 'Xolo $1'
|
4601
4869
|
brand_replacement: 'Xolo'
|
4602
4870
|
model_replacement: '$1'
|
4603
|
-
- regex: ';
|
4871
|
+
- regex: '; {0,2}(q\d0{2,3}[a-z]?)(?: Build|\) AppleWebKit)'
|
4604
4872
|
regex_flag: 'i'
|
4605
4873
|
device_replacement: 'Xolo $1'
|
4606
4874
|
brand_replacement: 'Xolo'
|
@@ -4610,7 +4878,7 @@ device_parsers:
|
|
4610
4878
|
# Xoro
|
4611
4879
|
# @ref: http://www.xoro.de/produkte/
|
4612
4880
|
#########
|
4613
|
-
- regex: ';
|
4881
|
+
- regex: '; {0,2}(PAD ?[79]\d+[^;/]{0,50}|TelePAD\d+[^;/])(?: Build|\) AppleWebKit)'
|
4614
4882
|
device_replacement: 'Xoro $1'
|
4615
4883
|
brand_replacement: 'Xoro'
|
4616
4884
|
model_replacement: '$1'
|
@@ -4619,7 +4887,7 @@ device_parsers:
|
|
4619
4887
|
# Zopo
|
4620
4888
|
# @ref: http://www.zopomobiles.com/products.html
|
4621
4889
|
#########
|
4622
|
-
- regex: ';
|
4890
|
+
- regex: '; {0,2}(?:(?:ZOPO|Zopo)[ _]([^;/]{1,100}?)|(ZP ?(?:\d{2}[^;/]{1,100}|C2))|(C[2379]))(?: Build|\) AppleWebKit)'
|
4623
4891
|
device_replacement: '$1$2$3'
|
4624
4892
|
brand_replacement: 'Zopo'
|
4625
4893
|
model_replacement: '$1$2$3'
|
@@ -4628,11 +4896,11 @@ device_parsers:
|
|
4628
4896
|
# ZiiLabs
|
4629
4897
|
# @ref: http://www.ziilabs.com/products/platforms/androidreferencetablets.php
|
4630
4898
|
#########
|
4631
|
-
- regex: ';
|
4899
|
+
- regex: '; {0,2}(ZiiLABS) (Zii[^;/]*)(?: Build|\) AppleWebKit)'
|
4632
4900
|
device_replacement: '$1 $2'
|
4633
4901
|
brand_replacement: 'ZiiLabs'
|
4634
4902
|
model_replacement: '$2'
|
4635
|
-
- regex: ';
|
4903
|
+
- regex: '; {0,2}(Zii)_([^;/]*)(?: Build|\) AppleWebKit)'
|
4636
4904
|
device_replacement: '$1 $2'
|
4637
4905
|
brand_replacement: 'ZiiLabs'
|
4638
4906
|
model_replacement: '$2'
|
@@ -4641,36 +4909,36 @@ device_parsers:
|
|
4641
4909
|
# ZTE
|
4642
4910
|
# @ref: http://www.ztedevices.com/
|
4643
4911
|
#########
|
4644
|
-
- regex: ';
|
4912
|
+
- regex: '; {0,2}(ARIZONA|(?:ATLAS|Atlas) W|D930|Grand (?:[SX][^;]{0,200}?|Era|Memo[^;]{0,200}?)|JOE|(?:Kis|KIS)\b[^;]{0,200}?|Libra|Light [^;]{0,200}?|N8[056][01]|N850L|N8000|N9[15]\d{2}|N9810|NX501|Optik|(?:Vip )Racer[^;]{0,200}?|RacerII|RACERII|San Francisco[^;]{0,200}?|V9[AC]|V55|V881|Z[679][0-9]{2}[A-z]?)(?: Build|\) AppleWebKit)'
|
4645
4913
|
device_replacement: '$1'
|
4646
4914
|
brand_replacement: 'ZTE'
|
4647
4915
|
model_replacement: '$1'
|
4648
|
-
- regex: ';
|
4916
|
+
- regex: '; {0,2}([A-Z]\d+)_USA_[^;]{0,200}(?: Build|\) AppleWebKit)'
|
4649
4917
|
device_replacement: '$1'
|
4650
4918
|
brand_replacement: 'ZTE'
|
4651
4919
|
model_replacement: '$1'
|
4652
|
-
- regex: ';
|
4920
|
+
- regex: '; {0,2}(SmartTab\d+)[^;]{0,50}(?: Build|\) AppleWebKit)'
|
4653
4921
|
device_replacement: '$1'
|
4654
4922
|
brand_replacement: 'ZTE'
|
4655
4923
|
model_replacement: '$1'
|
4656
|
-
- regex: ';
|
4924
|
+
- regex: '; {0,2}(?:Blade|BLADE|ZTE-BLADE)([^;/]*)(?: Build|\) AppleWebKit)'
|
4657
4925
|
device_replacement: 'ZTE Blade$1'
|
4658
4926
|
brand_replacement: 'ZTE'
|
4659
4927
|
model_replacement: 'Blade$1'
|
4660
|
-
- regex: ';
|
4928
|
+
- regex: '; {0,2}(?:Skate|SKATE|ZTE-SKATE)([^;/]*)(?: Build|\) AppleWebKit)'
|
4661
4929
|
device_replacement: 'ZTE Skate$1'
|
4662
4930
|
brand_replacement: 'ZTE'
|
4663
4931
|
model_replacement: 'Skate$1'
|
4664
|
-
- regex: ';
|
4932
|
+
- regex: '; {0,2}(Orange |Optimus )(Monte Carlo|San Francisco)(?: Build|\) AppleWebKit)'
|
4665
4933
|
device_replacement: '$1$2'
|
4666
4934
|
brand_replacement: 'ZTE'
|
4667
4935
|
model_replacement: '$1$2'
|
4668
|
-
- regex: ';
|
4936
|
+
- regex: '; {0,2}(?:ZXY-ZTE_|ZTE\-U |ZTE[\- _]|ZTE-C[_ ])([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4669
4937
|
device_replacement: 'ZTE $1'
|
4670
4938
|
brand_replacement: 'ZTE'
|
4671
4939
|
model_replacement: '$1'
|
4672
4940
|
# operator specific
|
4673
|
-
- regex: '; (BASE) (lutea|Lutea 2|Tab[^;]
|
4941
|
+
- regex: '; (BASE) (lutea|Lutea 2|Tab[^;]{0,200}?)(?: Build|\) AppleWebKit)'
|
4674
4942
|
device_replacement: '$1 $2'
|
4675
4943
|
brand_replacement: 'ZTE'
|
4676
4944
|
model_replacement: '$1 $2'
|
@@ -4679,7 +4947,7 @@ device_parsers:
|
|
4679
4947
|
device_replacement: '$1'
|
4680
4948
|
brand_replacement: 'ZTE'
|
4681
4949
|
model_replacement: '$1'
|
4682
|
-
- regex: ';
|
4950
|
+
- regex: '; {0,2}(vp9plus)\)'
|
4683
4951
|
device_replacement: '$1'
|
4684
4952
|
brand_replacement: 'ZTE'
|
4685
4953
|
model_replacement: '$1'
|
@@ -4739,7 +5007,7 @@ device_parsers:
|
|
4739
5007
|
device_replacement: 'Kindle Fire HDX 8.9" 4G'
|
4740
5008
|
brand_replacement: 'Amazon'
|
4741
5009
|
model_replacement: 'Kindle Fire HDX 8.9" 4G'
|
4742
|
-
- regex: '; ?Amazon ([^;/]
|
5010
|
+
- regex: '; ?Amazon ([^;/]{1,100}) Build\b'
|
4743
5011
|
device_replacement: '$1'
|
4744
5012
|
brand_replacement: 'Amazon'
|
4745
5013
|
model_replacement: '$1'
|
@@ -4762,22 +5030,22 @@ device_parsers:
|
|
4762
5030
|
|
4763
5031
|
#########
|
4764
5032
|
# Devices from chinese manufacturer(s)
|
4765
|
-
# @note: identified by x-wap-profile http://218.249.47.94/Xianghe
|
5033
|
+
# @note: identified by x-wap-profile http://218.249.47.94/Xianghe/.{0,200}
|
4766
5034
|
#########
|
4767
|
-
- regex: '(sprd)\-([^/]
|
5035
|
+
- regex: '(sprd)\-([^/]{1,50})/'
|
4768
5036
|
device_replacement: '$1 $2'
|
4769
5037
|
brand_replacement: '$1'
|
4770
5038
|
model_replacement: '$2'
|
4771
5039
|
# @ref: http://eshinechina.en.alibaba.com/
|
4772
|
-
- regex: ';
|
5040
|
+
- regex: '; {0,2}(H\d{2}00\+?) Build'
|
4773
5041
|
device_replacement: '$1'
|
4774
5042
|
brand_replacement: 'Hero'
|
4775
5043
|
model_replacement: '$1'
|
4776
|
-
- regex: ';
|
5044
|
+
- regex: '; {0,2}(iphone|iPhone5) Build/'
|
4777
5045
|
device_replacement: 'Xianghe $1'
|
4778
5046
|
brand_replacement: 'Xianghe'
|
4779
5047
|
model_replacement: '$1'
|
4780
|
-
- regex: ';
|
5048
|
+
- regex: '; {0,2}(e\d{4}[a-z]?_?v\d+|v89_[^;/]{1,100})[^;/]{1,30} Build/'
|
4781
5049
|
device_replacement: 'Xianghe $1'
|
4782
5050
|
brand_replacement: 'Xianghe'
|
4783
5051
|
model_replacement: '$1'
|
@@ -4799,7 +5067,7 @@ device_parsers:
|
|
4799
5067
|
#########
|
4800
5068
|
# Alcatel Windows Phones
|
4801
5069
|
#########
|
4802
|
-
- regex: 'Windows Phone [^;]
|
5070
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:ALCATEL)[^;]{0,200}; {0,2}([^;,\)]+)'
|
4803
5071
|
device_replacement: 'Alcatel $1'
|
4804
5072
|
brand_replacement: 'Alcatel'
|
4805
5073
|
model_replacement: '$1'
|
@@ -4807,8 +5075,7 @@ device_parsers:
|
|
4807
5075
|
#########
|
4808
5076
|
# Asus Windows Phones
|
4809
5077
|
#########
|
4810
|
-
|
4811
|
-
- regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:ASUS|Asus)[^;]*; *([^;,\)]+)'
|
5078
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:ASUS|Asus)[^;]{0,200}; {0,2}([^;,\)]+)'
|
4812
5079
|
device_replacement: 'Asus $1'
|
4813
5080
|
brand_replacement: 'Asus'
|
4814
5081
|
model_replacement: '$1'
|
@@ -4816,7 +5083,7 @@ device_parsers:
|
|
4816
5083
|
#########
|
4817
5084
|
# Dell Windows Phones
|
4818
5085
|
#########
|
4819
|
-
- regex: 'Windows Phone [^;]
|
5086
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:DELL|Dell)[^;]{0,200}; {0,2}([^;,\)]+)'
|
4820
5087
|
device_replacement: 'Dell $1'
|
4821
5088
|
brand_replacement: 'Dell'
|
4822
5089
|
model_replacement: '$1'
|
@@ -4824,7 +5091,7 @@ device_parsers:
|
|
4824
5091
|
#########
|
4825
5092
|
# HTC Windows Phones
|
4826
5093
|
#########
|
4827
|
-
- regex: 'Windows Phone [^;]
|
5094
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:HTC|Htc|HTC_blocked[^;]{0,200})[^;]{0,200}; {0,2}(?:HTC|)([^;,\)]+)'
|
4828
5095
|
device_replacement: 'HTC $1'
|
4829
5096
|
brand_replacement: 'HTC'
|
4830
5097
|
model_replacement: '$1'
|
@@ -4832,7 +5099,7 @@ device_parsers:
|
|
4832
5099
|
#########
|
4833
5100
|
# Huawei Windows Phones
|
4834
5101
|
#########
|
4835
|
-
- regex: 'Windows Phone [^;]
|
5102
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:HUAWEI)[^;]{0,200}; {0,2}(?:HUAWEI |)([^;,\)]+)'
|
4836
5103
|
device_replacement: 'Huawei $1'
|
4837
5104
|
brand_replacement: 'Huawei'
|
4838
5105
|
model_replacement: '$1'
|
@@ -4840,7 +5107,7 @@ device_parsers:
|
|
4840
5107
|
#########
|
4841
5108
|
# LG Windows Phones
|
4842
5109
|
#########
|
4843
|
-
- regex: 'Windows Phone [^;]
|
5110
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:LG|Lg)[^;]{0,200}; {0,2}(?:LG[ \-]|)([^;,\)]+)'
|
4844
5111
|
device_replacement: 'LG $1'
|
4845
5112
|
brand_replacement: 'LG'
|
4846
5113
|
model_replacement: '$1'
|
@@ -4848,15 +5115,15 @@ device_parsers:
|
|
4848
5115
|
#########
|
4849
5116
|
# Noka Windows Phones
|
4850
5117
|
#########
|
4851
|
-
- regex: 'Windows Phone [^;]
|
5118
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:rv:11; |)(?:NOKIA|Nokia)[^;]{0,200}; {0,2}(?:NOKIA ?|Nokia ?|LUMIA ?|[Ll]umia ?|)(\d{3,10}[^;\)]*)'
|
4852
5119
|
device_replacement: 'Lumia $1'
|
4853
5120
|
brand_replacement: 'Nokia'
|
4854
5121
|
model_replacement: 'Lumia $1'
|
4855
|
-
- regex: 'Windows Phone [^;]
|
5122
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:NOKIA|Nokia)[^;]{0,200}; {0,2}(RM-\d{3,})'
|
4856
5123
|
device_replacement: 'Nokia $1'
|
4857
5124
|
brand_replacement: 'Nokia'
|
4858
5125
|
model_replacement: '$1'
|
4859
|
-
- regex: '(?:Windows Phone [^;]
|
5126
|
+
- regex: '(?:Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)]|WPDesktop;) ?(?:ARM; ?Touch; ?|Touch; ?|)(?:NOKIA|Nokia)[^;]{0,200}; {0,2}(?:NOKIA ?|Nokia ?|LUMIA ?|[Ll]umia ?|)([^;\)]+)'
|
4860
5127
|
device_replacement: 'Nokia $1'
|
4861
5128
|
brand_replacement: 'Nokia'
|
4862
5129
|
model_replacement: '$1'
|
@@ -4864,7 +5131,7 @@ device_parsers:
|
|
4864
5131
|
#########
|
4865
5132
|
# Microsoft Windows Phones
|
4866
5133
|
#########
|
4867
|
-
- regex: 'Windows Phone [^;]
|
5134
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:Microsoft(?: Corporation|))[^;]{0,200}; {0,2}([^;,\)]+)'
|
4868
5135
|
device_replacement: 'Microsoft $1'
|
4869
5136
|
brand_replacement: 'Microsoft'
|
4870
5137
|
model_replacement: '$1'
|
@@ -4872,7 +5139,7 @@ device_parsers:
|
|
4872
5139
|
#########
|
4873
5140
|
# Samsung Windows Phones
|
4874
5141
|
#########
|
4875
|
-
- regex: 'Windows Phone [^;]
|
5142
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:SAMSUNG)[^;]{0,200}; {0,2}(?:SAMSUNG |)([^;,\.\)]+)'
|
4876
5143
|
device_replacement: 'Samsung $1'
|
4877
5144
|
brand_replacement: 'Samsung'
|
4878
5145
|
model_replacement: '$1'
|
@@ -4880,7 +5147,7 @@ device_parsers:
|
|
4880
5147
|
#########
|
4881
5148
|
# Toshiba Windows Phones
|
4882
5149
|
#########
|
4883
|
-
- regex: 'Windows Phone [^;]
|
5150
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:TOSHIBA|FujitsuToshibaMobileCommun)[^;]{0,200}; {0,2}([^;,\)]+)'
|
4884
5151
|
device_replacement: 'Toshiba $1'
|
4885
5152
|
brand_replacement: 'Toshiba'
|
4886
5153
|
model_replacement: '$1'
|
@@ -4888,7 +5155,7 @@ device_parsers:
|
|
4888
5155
|
#########
|
4889
5156
|
# Generic Windows Phones
|
4890
5157
|
#########
|
4891
|
-
- regex: 'Windows Phone [^;]
|
5158
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)([^;]{1,200}); {0,2}([^;,\)]+)'
|
4892
5159
|
device_replacement: '$1 $2'
|
4893
5160
|
brand_replacement: '$1'
|
4894
5161
|
model_replacement: '$2'
|
@@ -4900,7 +5167,7 @@ device_parsers:
|
|
4900
5167
|
#########
|
4901
5168
|
# Samsung Bada Phones
|
4902
5169
|
#########
|
4903
|
-
- regex: '(?:^|; )SAMSUNG\-([A-Za-z0-9\-]
|
5170
|
+
- regex: '(?:^|; )SAMSUNG\-([A-Za-z0-9\-]{1,50}).{0,200} Bada/'
|
4904
5171
|
device_replacement: 'Samsung $1'
|
4905
5172
|
brand_replacement: 'Samsung'
|
4906
5173
|
model_replacement: '$1'
|
@@ -4908,11 +5175,11 @@ device_parsers:
|
|
4908
5175
|
#########
|
4909
5176
|
# Firefox OS
|
4910
5177
|
#########
|
4911
|
-
- regex: '\(Mobile; ALCATEL ?(One|ONE) ?(Touch|TOUCH) ?([^;/]
|
5178
|
+
- regex: '\(Mobile; ALCATEL ?(One|ONE) ?(Touch|TOUCH) ?([^;/]{1,100}?)(?:/[^;]{1,200}|); rv:[^\)]{1,200}\) Gecko/[^\/]{1,200} Firefox/'
|
4912
5179
|
device_replacement: 'Alcatel $1 $2 $3'
|
4913
5180
|
brand_replacement: 'Alcatel'
|
4914
5181
|
model_replacement: 'One Touch $3'
|
4915
|
-
- regex: '\(Mobile; (?:ZTE([^;]
|
5182
|
+
- regex: '\(Mobile; (?:ZTE([^;]{1,200})|(OpenC)); rv:[^\)]{1,200}\) Gecko/[^\/]{1,200} Firefox/'
|
4916
5183
|
device_replacement: 'ZTE $1$2'
|
4917
5184
|
brand_replacement: 'ZTE'
|
4918
5185
|
model_replacement: '$1$2'
|
@@ -4920,15 +5187,15 @@ device_parsers:
|
|
4920
5187
|
#########
|
4921
5188
|
# KaiOS
|
4922
5189
|
#########
|
4923
|
-
- regex: '\(Mobile; ALCATEL([A-Za-z0-9\-]+); rv:[^\)]
|
5190
|
+
- regex: '\(Mobile; ALCATEL([A-Za-z0-9\-]+); rv:[^\)]{1,200}\) Gecko/[^\/]{1,200} Firefox/[^\/]{1,200} KaiOS/'
|
4924
5191
|
device_replacement: 'Alcatel $1'
|
4925
5192
|
brand_replacement: 'Alcatel'
|
4926
5193
|
model_replacement: '$1'
|
4927
|
-
- regex: '\(Mobile; LYF\/([A-Za-z0-9\-]
|
5194
|
+
- regex: '\(Mobile; LYF\/([A-Za-z0-9\-]{1,100})\/.{0,100};.{0,100}rv:[^\)]{1,100}\) Gecko/[^\/]{1,100} Firefox/[^\/]{1,100} KAIOS/'
|
4928
5195
|
device_replacement: 'LYF $1'
|
4929
5196
|
brand_replacement: 'LYF'
|
4930
5197
|
model_replacement: '$1'
|
4931
|
-
- regex: '\(Mobile; Nokia_([A-Za-z0-9\-]
|
5198
|
+
- regex: '\(Mobile; Nokia_([A-Za-z0-9\-]{1,100})_.{1,100}; rv:[^\)]{1,100}\) Gecko/[^\/]{1,100} Firefox/[^\/]{1,100} KAIOS/'
|
4932
5199
|
device_replacement: 'Nokia $1'
|
4933
5200
|
brand_replacement: 'Nokia'
|
4934
5201
|
model_replacement: '$1'
|
@@ -4941,7 +5208,7 @@ device_parsers:
|
|
4941
5208
|
device_replacement: 'Nokia $1'
|
4942
5209
|
brand_replacement: 'Nokia'
|
4943
5210
|
model_replacement: '$1$2'
|
4944
|
-
- regex: '(?:NOKIA|Nokia)(?:\-|
|
5211
|
+
- regex: '(?:NOKIA|Nokia)(?:\-| {0,2})(?:([A-Za-z0-9]+)\-[0-9a-f]{32}|([A-Za-z0-9\-]+)(?:UCBrowser)|([A-Za-z0-9\-]+))'
|
4945
5212
|
device_replacement: 'Nokia $1$2$3'
|
4946
5213
|
brand_replacement: 'Nokia'
|
4947
5214
|
model_replacement: '$1$2$3'
|
@@ -4950,12 +5217,12 @@ device_parsers:
|
|
4950
5217
|
brand_replacement: 'Nokia'
|
4951
5218
|
model_replacement: 'Lumia $1'
|
4952
5219
|
# UCWEB Browser on Symbian
|
4953
|
-
- regex: '\(Symbian; U; S60 V5; [A-z]{2}\-[A-z]{2}; (SonyEricsson|Samsung|Nokia|LG)([^;/]
|
5220
|
+
- regex: '\(Symbian; U; S60 V5; [A-z]{2}\-[A-z]{2}; (SonyEricsson|Samsung|Nokia|LG)([^;/]{1,100}?)\)'
|
4954
5221
|
device_replacement: '$1 $2'
|
4955
5222
|
brand_replacement: '$1'
|
4956
5223
|
model_replacement: '$2'
|
4957
5224
|
# Nokia Symbian
|
4958
|
-
- regex: '\(Symbian(?:/3|); U; ([^;]
|
5225
|
+
- regex: '\(Symbian(?:/3|); U; ([^;]{1,200});'
|
4959
5226
|
device_replacement: 'Nokia $1'
|
4960
5227
|
brand_replacement: 'Nokia'
|
4961
5228
|
model_replacement: '$1'
|
@@ -4968,7 +5235,7 @@ device_parsers:
|
|
4968
5235
|
device_replacement: 'BlackBerry $1'
|
4969
5236
|
brand_replacement: 'BlackBerry'
|
4970
5237
|
model_replacement: '$1'
|
4971
|
-
- regex: 'Play[Bb]ook
|
5238
|
+
- regex: 'Play[Bb]ook.{1,200}RIM Tablet OS'
|
4972
5239
|
device_replacement: 'BlackBerry Playbook'
|
4973
5240
|
brand_replacement: 'BlackBerry'
|
4974
5241
|
model_replacement: 'Playbook'
|
@@ -5000,7 +5267,7 @@ device_parsers:
|
|
5000
5267
|
device_replacement: 'Palm Treo $1'
|
5001
5268
|
brand_replacement: 'Palm'
|
5002
5269
|
model_replacement: 'Treo $1'
|
5003
|
-
- regex: 'webOS
|
5270
|
+
- regex: 'webOS.{0,200}(P160U(?:NA|))/(\d+).(\d+)'
|
5004
5271
|
device_replacement: 'HP Veer'
|
5005
5272
|
brand_replacement: 'HP'
|
5006
5273
|
model_replacement: 'Veer'
|
@@ -5008,7 +5275,7 @@ device_parsers:
|
|
5008
5275
|
device_replacement: 'HP TouchPad'
|
5009
5276
|
brand_replacement: 'HP'
|
5010
5277
|
model_replacement: 'TouchPad'
|
5011
|
-
- regex: 'HPiPAQ([A-Za-z0-9]
|
5278
|
+
- regex: 'HPiPAQ([A-Za-z0-9]{1,20})/\d+\.\d+'
|
5012
5279
|
device_replacement: 'HP iPAQ $1'
|
5013
5280
|
brand_replacement: 'HP'
|
5014
5281
|
model_replacement: 'iPAQ $1'
|
@@ -5076,18 +5343,18 @@ device_parsers:
|
|
5076
5343
|
brand_replacement: 'Apple'
|
5077
5344
|
model_replacement: 'iPhone'
|
5078
5345
|
# @note: desktop applications show device info
|
5079
|
-
- regex: 'CFNetwork
|
5346
|
+
- regex: 'CFNetwork/.{0,100} Darwin/\d.{0,100}\(((?:Mac|iMac|PowerMac|PowerBook)[^\d]*)(\d+)(?:,|%2C)(\d+)'
|
5080
5347
|
device_replacement: '$1$2,$3'
|
5081
5348
|
brand_replacement: 'Apple'
|
5082
5349
|
model_replacement: '$1$2,$3'
|
5083
5350
|
# @note: newer desktop applications don't show device info
|
5084
5351
|
# This is here so as to not have them recorded as iOS-Device
|
5085
|
-
- regex: 'CFNetwork
|
5352
|
+
- regex: 'CFNetwork/.{0,100} Darwin/\d+\.\d+\.\d+ \(x86_64\)'
|
5086
5353
|
device_replacement: 'Mac'
|
5087
5354
|
brand_replacement: 'Apple'
|
5088
5355
|
model_replacement: 'Mac'
|
5089
5356
|
# @note: iOS applications do not show device info
|
5090
|
-
- regex: 'CFNetwork
|
5357
|
+
- regex: 'CFNetwork/.{0,100} Darwin/\d'
|
5091
5358
|
device_replacement: 'iOS-Device'
|
5092
5359
|
brand_replacement: 'Apple'
|
5093
5360
|
model_replacement: 'iOS-Device'
|
@@ -5131,7 +5398,7 @@ device_parsers:
|
|
5131
5398
|
device_replacement: 'Asus $1'
|
5132
5399
|
brand_replacement: 'Asus'
|
5133
5400
|
model_replacement: '$1'
|
5134
|
-
- regex: '(?:asus
|
5401
|
+
- regex: '(?:asus.{0,200}?ASUS|Asus|ASUS|asus)[\- ;]*((?:Transformer (?:Pad|Prime) |Transformer |Padfone |Nexus[ _]|)[A-Za-z0-9]+)'
|
5135
5402
|
device_replacement: 'Asus $1'
|
5136
5403
|
brand_replacement: 'Asus'
|
5137
5404
|
model_replacement: '$1'
|
@@ -5164,11 +5431,11 @@ device_parsers:
|
|
5164
5431
|
device_replacement: 'DoCoMo $1'
|
5165
5432
|
brand_replacement: 'DoCoMo'
|
5166
5433
|
model_replacement: '$1'
|
5167
|
-
- regex: '([A-Za-z0-9]
|
5434
|
+
- regex: '^.{0,50}?([A-Za-z0-9]{1,30})_W;FOMA'
|
5168
5435
|
device_replacement: 'DoCoMo $1'
|
5169
5436
|
brand_replacement: 'DoCoMo'
|
5170
5437
|
model_replacement: '$1'
|
5171
|
-
- regex: '([A-Za-z0-9]
|
5438
|
+
- regex: '^.{0,50}?([A-Za-z0-9]{1,30});FOMA'
|
5172
5439
|
device_replacement: 'DoCoMo $1'
|
5173
5440
|
brand_replacement: 'DoCoMo'
|
5174
5441
|
model_replacement: '$1'
|
@@ -5176,7 +5443,7 @@ device_parsers:
|
|
5176
5443
|
##########
|
5177
5444
|
# htc
|
5178
5445
|
##########
|
5179
|
-
- regex: '\b(?:HTC/|HTC/[a-z0-9]
|
5446
|
+
- regex: '\b(?:HTC/|HTC/[a-z0-9]{1,20}/|)HTC[ _\-;]? {0,2}(.{0,200}?)(?:-?Mozilla|fingerPrint|[;/\(\)]|$)'
|
5180
5447
|
device_replacement: 'HTC $1'
|
5181
5448
|
brand_replacement: 'HTC'
|
5182
5449
|
model_replacement: '$1'
|
@@ -5237,18 +5504,18 @@ device_parsers:
|
|
5237
5504
|
device_replacement: '$1'
|
5238
5505
|
brand_replacement: '$2'
|
5239
5506
|
model_replacement: '$3'
|
5240
|
-
- regex: '(HbbTV)/1\.1\.1
|
5507
|
+
- regex: '(HbbTV)/1\.1\.1.{0,200}CE-HTML/1\.\d;(Vendor/|)(THOM[^;]{0,200}?)[;\s].{0,30}(LF[^;]{1,200});?'
|
5241
5508
|
device_replacement: '$1'
|
5242
5509
|
brand_replacement: 'Thomson'
|
5243
5510
|
model_replacement: '$4'
|
5244
|
-
- regex: '(HbbTV)(?:/1\.1\.1|) ?(?: \(;;;;;\)|);
|
5511
|
+
- regex: '(HbbTV)(?:/1\.1\.1|) ?(?: \(;;;;;\)|); {0,2}CE-HTML(?:/1\.\d|); {0,2}([^ ]{1,30}) ([^;]{1,200});'
|
5245
5512
|
device_replacement: '$1'
|
5246
5513
|
brand_replacement: '$2'
|
5247
5514
|
model_replacement: '$3'
|
5248
5515
|
- regex: '(HbbTV)/1\.1\.1 \(;;;;;\) Maple_2011'
|
5249
5516
|
device_replacement: '$1'
|
5250
5517
|
brand_replacement: 'Samsung'
|
5251
|
-
- regex: '(HbbTV)/[0-9]+\.[0-9]+\.[0-9]+ \([^;]{0,30}; ?(?:CUS:([^;]
|
5518
|
+
- regex: '(HbbTV)/[0-9]+\.[0-9]+\.[0-9]+ \([^;]{0,30}; ?(?:CUS:([^;]{0,200})|([^;]{1,200})) ?; ?([^;]{0,30})'
|
5252
5519
|
device_replacement: '$1'
|
5253
5520
|
brand_replacement: '$2$3'
|
5254
5521
|
model_replacement: '$4'
|
@@ -5258,7 +5525,7 @@ device_parsers:
|
|
5258
5525
|
##########
|
5259
5526
|
# LGE NetCast TV
|
5260
5527
|
##########
|
5261
|
-
- regex: 'LGE; (?:Media\/|)([^;]
|
5528
|
+
- regex: 'LGE; (?:Media\/|)([^;]{0,200});[^;]{0,200};[^;]{0,200};?\); "?LG NetCast(\.TV|\.Media|)-\d+'
|
5262
5529
|
device_replacement: 'NetCast$2'
|
5263
5530
|
brand_replacement: 'LG'
|
5264
5531
|
model_replacement: '$1'
|
@@ -5266,11 +5533,11 @@ device_parsers:
|
|
5266
5533
|
##########
|
5267
5534
|
# InettvBrowser
|
5268
5535
|
##########
|
5269
|
-
- regex: 'InettvBrowser/[0-9]
|
5536
|
+
- regex: 'InettvBrowser/[0-9]{1,30}\.[0-9A-Z]{1,30} \([^;]{0,200};(Sony)([^;]{0,200});[^;]{0,200};[^\)]{0,10}\)'
|
5270
5537
|
device_replacement: 'Inettv'
|
5271
5538
|
brand_replacement: '$1'
|
5272
5539
|
model_replacement: '$2'
|
5273
|
-
- regex: 'InettvBrowser/[0-9]
|
5540
|
+
- regex: 'InettvBrowser/[0-9]{1,30}\.[0-9A-Z]{1,30} \([^;]{0,200};([^;]{0,200});[^;]{0,200};[^\)]{0,10}\)'
|
5274
5541
|
device_replacement: 'Inettv'
|
5275
5542
|
brand_replacement: 'Generic_Inettv'
|
5276
5543
|
model_replacement: '$1'
|
@@ -5307,7 +5574,7 @@ device_parsers:
|
|
5307
5574
|
device_replacement: 'Microsoft $1'
|
5308
5575
|
brand_replacement: 'Microsoft'
|
5309
5576
|
model_replacement: '$1'
|
5310
|
-
- regex: '(?:MSIE|XBMC)
|
5577
|
+
- regex: '(?:MSIE|XBMC).{0,200}\b(Xbox)\b'
|
5311
5578
|
device_replacement: '$1'
|
5312
5579
|
brand_replacement: 'Microsoft'
|
5313
5580
|
model_replacement: '$1'
|
@@ -5331,6 +5598,15 @@ device_parsers:
|
|
5331
5598
|
device_replacement: 'Motorola $1'
|
5332
5599
|
brand_replacement: 'Motorola'
|
5333
5600
|
model_replacement: '$1'
|
5601
|
+
- regex: '; (moto[ a-zA-z0-9()]{0,50});((?: Build|.{0,50}\) AppleWebKit))'
|
5602
|
+
device_replacement: '$1'
|
5603
|
+
brand_replacement: 'Motorola'
|
5604
|
+
model_replacement: '$1'
|
5605
|
+
- regex: '; {0,2}(moto)(.{0,50})(?: Build|\) AppleWebKit)'
|
5606
|
+
device_replacement: 'Motorola$2'
|
5607
|
+
brand_replacement: 'Motorola'
|
5608
|
+
model_replacement: '$2'
|
5609
|
+
|
5334
5610
|
|
5335
5611
|
##########
|
5336
5612
|
# nintendo
|
@@ -5368,12 +5644,12 @@ device_parsers:
|
|
5368
5644
|
# Samsung
|
5369
5645
|
##########
|
5370
5646
|
# Samsung Smart-TV
|
5371
|
-
- regex: '(SMART-TV);
|
5647
|
+
- regex: '(SMART-TV); .{0,200} Tizen '
|
5372
5648
|
device_replacement: 'Samsung $1'
|
5373
5649
|
brand_replacement: 'Samsung'
|
5374
5650
|
model_replacement: '$1'
|
5375
5651
|
# Samsung Symbian Devices
|
5376
|
-
- regex: 'SymbianOS/9\.\d
|
5652
|
+
- regex: 'SymbianOS/9\.\d.{0,200} Samsung[/\-]([A-Za-z0-9 \-]+)'
|
5377
5653
|
device_replacement: 'Samsung $1'
|
5378
5654
|
brand_replacement: 'Samsung'
|
5379
5655
|
model_replacement: '$1'
|
@@ -5381,7 +5657,7 @@ device_parsers:
|
|
5381
5657
|
device_replacement: '$1 $2$3'
|
5382
5658
|
brand_replacement: '$1'
|
5383
5659
|
model_replacement: '$2-$3'
|
5384
|
-
- regex: 'SAMSUNG-ANDROID-MMS/([^;/]
|
5660
|
+
- regex: 'SAMSUNG-ANDROID-MMS/([^;/]{1,100})'
|
5385
5661
|
device_replacement: '$1'
|
5386
5662
|
brand_replacement: 'Samsung'
|
5387
5663
|
model_replacement: '$1'
|
@@ -5428,7 +5704,7 @@ device_parsers:
|
|
5428
5704
|
##########
|
5429
5705
|
# Sony
|
5430
5706
|
##########
|
5431
|
-
- regex: 'Android [^;]
|
5707
|
+
- regex: 'Android [^;]{1,200}; ([^ ]+) (Sony)/'
|
5432
5708
|
device_replacement: '$2 $1'
|
5433
5709
|
brand_replacement: '$2'
|
5434
5710
|
model_replacement: '$1'
|
@@ -5462,33 +5738,33 @@ device_parsers:
|
|
5462
5738
|
#########
|
5463
5739
|
# Android General Device Matching (far from perfect)
|
5464
5740
|
#########
|
5465
|
-
- regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; WOWMobile (
|
5741
|
+
- regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; WOWMobile (.{1,200})( Build[/ ]|\))'
|
5466
5742
|
brand_replacement: 'Generic_Android'
|
5467
5743
|
model_replacement: '$1'
|
5468
|
-
- regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{0,2}
|
5744
|
+
- regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{0,2} {0,2}; {0,2}(.{1,200}?)( Build[/ ]|\))'
|
5469
5745
|
brand_replacement: 'Generic_Android'
|
5470
5746
|
model_replacement: '$1'
|
5471
|
-
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|);
|
5747
|
+
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); {0,2}[A-Za-z]{2}[_\-][A-Za-z]{0,2}\-? {0,2}; {0,2}(.{1,200}?)( Build[/ ]|\))'
|
5472
5748
|
brand_replacement: 'Generic_Android'
|
5473
5749
|
model_replacement: '$1'
|
5474
|
-
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|);
|
5750
|
+
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); {0,2}[A-Za-z]{0,2}\- {0,2}; {0,2}(.{1,200}?)( Build[/ ]|\))'
|
5475
5751
|
brand_replacement: 'Generic_Android'
|
5476
5752
|
model_replacement: '$1'
|
5477
5753
|
# No build info at all - "Build" follows locale immediately
|
5478
|
-
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|);
|
5754
|
+
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); {0,2}[a-z]{0,2}[_\-]?[A-Za-z]{0,2};?( Build[/ ]|\))'
|
5479
5755
|
device_replacement: 'Generic Smartphone'
|
5480
5756
|
brand_replacement: 'Generic'
|
5481
5757
|
model_replacement: 'Smartphone'
|
5482
|
-
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|);
|
5758
|
+
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); {0,3}\-?[A-Za-z]{2}; {0,2}(.{1,50}?)( Build[/ ]|\))'
|
5483
5759
|
brand_replacement: 'Generic_Android'
|
5484
5760
|
model_replacement: '$1'
|
5485
|
-
- regex: 'Android \d+?(?:\.\d+|)(?:\.\d+|); ([^;]
|
5761
|
+
- regex: 'Android \d+?(?:\.\d+|)(?:\.\d+|); ([^;]{1,100}?)(?: Build|\) AppleWebKit).{1,200}? Mobile Safari'
|
5486
5762
|
brand_replacement: 'Generic_Android'
|
5487
5763
|
model_replacement: '$1'
|
5488
|
-
- regex: 'Android \d+?(?:\.\d+|)(?:\.\d+|); ([^;]
|
5764
|
+
- regex: 'Android \d+?(?:\.\d+|)(?:\.\d+|); ([^;]{1,100}?)(?: Build|\) AppleWebKit).{1,200}? Safari'
|
5489
5765
|
brand_replacement: 'Generic_Android_Tablet'
|
5490
5766
|
model_replacement: '$1'
|
5491
|
-
- regex: 'Android \d+?(?:\.\d+|)(?:\.\d+|); ([^;]
|
5767
|
+
- regex: 'Android \d+?(?:\.\d+|)(?:\.\d+|); ([^;]{1,100}?)(?: Build|\))'
|
5492
5768
|
brand_replacement: 'Generic_Android'
|
5493
5769
|
model_replacement: '$1'
|
5494
5770
|
|
@@ -5513,7 +5789,7 @@ device_parsers:
|
|
5513
5789
|
##########
|
5514
5790
|
# Generic Tablet
|
5515
5791
|
##########
|
5516
|
-
- regex: '(Android 3\.\d|Opera Tablet|Tablet;
|
5792
|
+
- regex: '(Android 3\.\d|Opera Tablet|Tablet; .{1,100}Firefox/|Android.{0,100}(?:Tab|Pad))'
|
5517
5793
|
regex_flag: 'i'
|
5518
5794
|
device_replacement: 'Generic Tablet'
|
5519
5795
|
brand_replacement: 'Generic'
|
@@ -5522,7 +5798,7 @@ device_parsers:
|
|
5522
5798
|
##########
|
5523
5799
|
# Generic Smart Phone
|
5524
5800
|
##########
|
5525
|
-
- regex: '(Symbian|\bS60(Version|V\d)|\bS60\b|\((Series 60|Windows Mobile|Palm OS|Bada); Opera Mini|Windows CE|Opera Mobi|BREW|Brew|Mobile;
|
5801
|
+
- regex: '(Symbian|\bS60(Version|V\d)|\bS60\b|\((Series 60|Windows Mobile|Palm OS|Bada); Opera Mini|Windows CE|Opera Mobi|BREW|Brew|Mobile; .{1,200}Firefox/|iPhone OS|Android|MobileSafari|Windows {0,2}Phone|\(webOS/|PalmOS)'
|
5526
5802
|
device_replacement: 'Generic Smartphone'
|
5527
5803
|
brand_replacement: 'Generic'
|
5528
5804
|
model_replacement: 'Smartphone'
|
@@ -5535,7 +5811,7 @@ device_parsers:
|
|
5535
5811
|
##########
|
5536
5812
|
# Spiders (this is a hack...)
|
5537
5813
|
##########
|
5538
|
-
- regex: '(bot|BUbiNG|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Daum|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google
|
5814
|
+
- regex: '^.{0,100}(bot|BUbiNG|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Daum|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.{0,200}/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom|StatusCake|WhatsApp|masscan|Google Web Preview|Qwantify|Yeti|OgScrper)'
|
5539
5815
|
regex_flag: 'i'
|
5540
5816
|
device_replacement: 'Spider'
|
5541
5817
|
brand_replacement: 'Spider'
|