user_agent_parser 2.7.0 → 2.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +1033 -663
- 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|Phantom\/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,11 +373,34 @@ 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'
|
376
380
|
|
381
|
+
# Huawei Browser, should go before Safari and Chrome Mobile
|
382
|
+
- regex: '(HuaweiBrowser)/(\d+)\.(\d+)\.(\d+)\.\d+'
|
383
|
+
family_replacement: 'Huawei Browser'
|
384
|
+
|
385
|
+
# AVG
|
386
|
+
- regex: '(AVG)/(\d+)\.(\d+)\.(\d+)\.\d+'
|
387
|
+
family_replacement: 'AVG'
|
388
|
+
|
389
|
+
# Avast
|
390
|
+
- regex: '(AvastSecureBrowser|Avast)/(\d+)\.(\d+)\.(\d+)'
|
391
|
+
family_replacement: 'Avast Secure Browser'
|
392
|
+
|
393
|
+
# Instabridge
|
394
|
+
- regex: '(Instabridge)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
|
395
|
+
|
396
|
+
# Aloha Browser
|
397
|
+
- regex: '(AlohaBrowser)/(\d+)\.(\d+)\.(\d+)(?:\.(\d+)|)'
|
398
|
+
family_replacement: 'Aloha Browser'
|
399
|
+
|
400
|
+
# Brave Browser https://brave.com/ , should go before Safari and Chrome Mobile
|
401
|
+
- regex: '((?:B|b)rave(?:\sChrome)?)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|)'
|
402
|
+
family_replacement: 'Brave'
|
403
|
+
|
377
404
|
# Amazon Silk, should go before Safari and Chrome Mobile
|
378
405
|
- regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+)|)'
|
379
406
|
family_replacement: 'Amazon Silk'
|
@@ -382,11 +409,15 @@ user_agent_parsers:
|
|
382
409
|
- regex: '(Puffin)/(\d+)\.(\d+)(?:\.(\d+)|)'
|
383
410
|
|
384
411
|
# Edge Mobile
|
385
|
-
- regex: 'Windows Phone
|
412
|
+
- regex: 'Windows Phone .{0,200}(Edge)/(\d+)\.(\d+)'
|
386
413
|
family_replacement: 'Edge Mobile'
|
387
|
-
- regex: '(EdgiOS|EdgA)/(\d+)
|
414
|
+
- regex: '(EdgiOS|EdgA)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|)'
|
388
415
|
family_replacement: 'Edge Mobile'
|
389
416
|
|
417
|
+
# Oculus Browser, should go before Samsung Internet
|
418
|
+
- regex: '(OculusBrowser)/(\d+)\.(\d+).0.0(?:\.([0-9\-]+)|)'
|
419
|
+
family_replacement: 'Oculus Browser'
|
420
|
+
|
390
421
|
# Samsung Internet (based on Chrome, but lacking some features)
|
391
422
|
- regex: '(SamsungBrowser)/(\d+)\.(\d+)'
|
392
423
|
family_replacement: 'Samsung Internet'
|
@@ -430,7 +461,7 @@ user_agent_parsers:
|
|
430
461
|
family_replacement: 'TopBuzz'
|
431
462
|
|
432
463
|
# Google Search App on Android, eg:
|
433
|
-
- regex: 'Mozilla
|
464
|
+
- regex: 'Mozilla.{1,200}Android.{1,200}(GSA)/(\d+)\.(\d+)\.(\d+)'
|
434
465
|
family_replacement: 'Google'
|
435
466
|
|
436
467
|
# QQ Browsers
|
@@ -441,18 +472,38 @@ user_agent_parsers:
|
|
441
472
|
- regex: '(QQBrowser)(?:/(\d+)(?:\.(\d+)\.(\d+)(?:\.(\d+)|)|)|)'
|
442
473
|
family_replacement: 'QQ Browser'
|
443
474
|
|
475
|
+
# DuckDuckGo
|
476
|
+
- regex: 'Mozilla.{1,200}Mobile.{1,100}(DuckDuckGo)/(\d+)'
|
477
|
+
family_replacement: 'DuckDuckGo Mobile'
|
478
|
+
- regex: 'Mozilla.{1,200}(DuckDuckGo)/(\d+)'
|
479
|
+
family_replacement: 'DuckDuckGo'
|
480
|
+
- regex: 'Mozilla.{1,200}Mobile.{1,100}(Ddg)/(\d+)(?:\.(\d+)|)'
|
481
|
+
family_replacement: 'DuckDuckGo Mobile'
|
482
|
+
- regex: 'Mozilla.{1,200}(Ddg)/(\d+)(?:\.(\d+)|)'
|
483
|
+
family_replacement: 'DuckDuckGo'
|
484
|
+
|
485
|
+
# Tenta Browser
|
486
|
+
- regex: '(Tenta/)(\d+)\.(\d+)\.(\d+)'
|
487
|
+
family_replacement: 'Tenta Browser'
|
488
|
+
|
489
|
+
# Ecosia on iOS / Android
|
490
|
+
- regex: '(Ecosia) ios@(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
491
|
+
family_replacement: 'Ecosia iOS'
|
492
|
+
- regex: '(Ecosia) android@(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
493
|
+
family_replacement: 'Ecosia Android'
|
494
|
+
|
444
495
|
# Chrome Mobile
|
445
|
-
- regex: 'Version
|
496
|
+
- regex: 'Version/.{1,300}(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
446
497
|
family_replacement: 'Chrome Mobile WebView'
|
447
|
-
- regex: '; wv\)
|
498
|
+
- regex: '; wv\).{1,300}(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
448
499
|
family_replacement: 'Chrome Mobile WebView'
|
449
500
|
- regex: '(CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
450
501
|
family_replacement: 'Chrome Mobile'
|
451
|
-
- regex: '(CriOS)/(\d+)
|
502
|
+
- regex: '(CriOS)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|)'
|
452
503
|
family_replacement: 'Chrome Mobile iOS'
|
453
504
|
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+) Mobile(?:[ /]|$)'
|
454
505
|
family_replacement: 'Chrome Mobile'
|
455
|
-
- regex: ' Mobile
|
506
|
+
- regex: ' Mobile .{1,300}(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
456
507
|
family_replacement: 'Chrome Mobile'
|
457
508
|
|
458
509
|
# Chrome Frame must come before MSIE.
|
@@ -480,9 +531,11 @@ user_agent_parsers:
|
|
480
531
|
# Yandex Browser
|
481
532
|
- regex: '(YaBrowser)/(\d+)\.(\d+)\.(\d+)'
|
482
533
|
family_replacement: 'Yandex Browser'
|
534
|
+
- regex: '(YaSearchBrowser)/(\d+)\.(\d+)\.(\d+)'
|
535
|
+
family_replacement: 'Yandex Browser'
|
483
536
|
|
484
537
|
# Mail.ru Amigo/Internet Browser (Chromium-based)
|
485
|
-
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)
|
538
|
+
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+).{0,100} MRCHROME'
|
486
539
|
family_replacement: 'Mail.ru Chromium Browser'
|
487
540
|
|
488
541
|
# AOL Browser (IE-based)
|
@@ -509,6 +562,13 @@ user_agent_parsers:
|
|
509
562
|
# @ref: http://www.ghost.org
|
510
563
|
- regex: '(Ghost)/(\d+)\.(\d+)\.(\d+)'
|
511
564
|
|
565
|
+
# Palo Alto GlobalProtect Linux
|
566
|
+
- regex: 'PAN (GlobalProtect)/(\d+)\.(\d+)\.(\d+) .{1,100} \(X11; Linux x86_64\)'
|
567
|
+
|
568
|
+
# Surveyon https://www.surveyon.com/
|
569
|
+
- regex: '^(surveyon)/(\d+)\.(\d+)\.(\d+)'
|
570
|
+
family_replacement: 'Surveyon'
|
571
|
+
|
512
572
|
#### END SPECIAL CASES TOP ####
|
513
573
|
|
514
574
|
#### MAIN CASES - this catches > 50% of all browsers ####
|
@@ -550,7 +610,7 @@ user_agent_parsers:
|
|
550
610
|
- regex: 'Microsoft Office (Word) 2014'
|
551
611
|
|
552
612
|
# Windows Live Mail
|
553
|
-
- regex: 'Outlook-Express\/7\.0
|
613
|
+
- regex: 'Outlook-Express\/7\.0'
|
554
614
|
family_replacement: 'Windows Live Mail'
|
555
615
|
|
556
616
|
# Apple Air Mail
|
@@ -577,20 +637,16 @@ user_agent_parsers:
|
|
577
637
|
- regex: 'Superhuman'
|
578
638
|
family_replacement: 'Superhuman'
|
579
639
|
|
580
|
-
# Vivaldi
|
581
|
-
- regex: '(Vivaldi)/(\d+)
|
640
|
+
# Vivaldi
|
641
|
+
- regex: '(Vivaldi)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
|
582
642
|
|
583
643
|
# Edge/major_version.minor_version
|
584
644
|
# Edge with chromium Edg/major_version.minor_version.patch.minor_patch
|
585
645
|
- regex: '(Edge?)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|)'
|
586
646
|
family_replacement: 'Edge'
|
587
647
|
|
588
|
-
# Brave Browser https://brave.com/
|
589
|
-
- regex: '(brave)/(\d+)\.(\d+)\.(\d+) Chrome'
|
590
|
-
family_replacement: 'Brave'
|
591
|
-
|
592
648
|
# Iron Browser ~since version 50
|
593
|
-
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)[\d.]
|
649
|
+
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)[\d.]{0,100} Iron[^/]'
|
594
650
|
family_replacement: 'Iron'
|
595
651
|
|
596
652
|
# Dolphin Browser
|
@@ -666,13 +722,13 @@ user_agent_parsers:
|
|
666
722
|
- regex: '^(HTC) Streaming Player \S+ / \S+ / \S+ / (\d+)\.(\d+)(?:\.(\d+)|)'
|
667
723
|
- regex: '^(Stitcher)/iOS'
|
668
724
|
- regex: '^(Stitcher)/Android'
|
669
|
-
- regex: '^(VLC)
|
725
|
+
- regex: '^(VLC) .{0,200}version (\d+)\.(\d+)\.(\d+)'
|
670
726
|
- regex: ' (VLC) for'
|
671
727
|
- regex: '(vlc)/(\d+)\.(\d+)\.(\d+)'
|
672
728
|
family_replacement: 'VLC'
|
673
|
-
- regex: '^(foobar)\S
|
674
|
-
- regex: '^(Clementine)\S
|
675
|
-
- regex: '(amarok)/(
|
729
|
+
- regex: '^(foobar)\S{1,10}/(\d+)\.(\d+|)\.?([\da-z]+|)'
|
730
|
+
- regex: '^(Clementine)\S{1,10} (\d+)\.(\d+|)\.?(\d+|)'
|
731
|
+
- regex: '(amarok)/(\d+)\.(\d+|)\.?(\d+|)'
|
676
732
|
family_replacement: 'Amarok'
|
677
733
|
- regex: '(Custom)-Feed Reader'
|
678
734
|
|
@@ -706,7 +762,7 @@ user_agent_parsers:
|
|
706
762
|
|
707
763
|
# desktop mode
|
708
764
|
# http://www.anandtech.com/show/3982/windows-phone-7-review
|
709
|
-
- regex: '(MSIE) (\d+)\.(\d+)
|
765
|
+
- regex: '(MSIE) (\d+)\.(\d+).{0,100}XBLWP7'
|
710
766
|
family_replacement: 'IE Large Screen'
|
711
767
|
|
712
768
|
# Nextcloud desktop sync client
|
@@ -723,6 +779,17 @@ user_agent_parsers:
|
|
723
779
|
- regex: '(OC)/(\d+)\.(\d+)\.(\d+)\.(\d+) \(Skype for Business\)'
|
724
780
|
family_replacement: 'Skype'
|
725
781
|
|
782
|
+
# OpenVAS Scanner
|
783
|
+
- regex: '(OpenVAS)(?:-VT)?(?:[ \/](\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)'
|
784
|
+
family_replacement: 'OpenVAS Scanner'
|
785
|
+
|
786
|
+
# AnyConnect
|
787
|
+
- regex: '(AnyConnect)\/(\d+)(?:\.(\d+)(?:\.(\d+)|)|)'
|
788
|
+
|
789
|
+
# Monitis
|
790
|
+
- regex: 'compatible; monitis'
|
791
|
+
family_replacement: 'Monitis'
|
792
|
+
|
726
793
|
#### END MAIN CASES ####
|
727
794
|
|
728
795
|
#### SPECIAL CASES ####
|
@@ -759,15 +826,15 @@ user_agent_parsers:
|
|
759
826
|
family_replacement: 'TopBuzz'
|
760
827
|
|
761
828
|
# @note: iOS / OSX Applications
|
762
|
-
- regex: '(iPod|iPhone|iPad)
|
829
|
+
- regex: '(iPod|iPhone|iPad).{1,200}GSA/(\d+)\.(\d+)\.(\d+)(?:\.(\d+)|) Mobile'
|
763
830
|
family_replacement: 'Google'
|
764
|
-
- regex: '(iPod|iPhone|iPad)
|
831
|
+
- regex: '(iPod|iPhone|iPad).{1,200}Version/(\d+)\.(\d+)(?:\.(\d+)|).{1,200}[ +]Safari'
|
765
832
|
family_replacement: 'Mobile Safari'
|
766
|
-
- regex: '(iPod|iPod touch|iPhone|iPad)
|
833
|
+
- regex: '(iPod|iPod touch|iPhone|iPad);.{0,30}CPU.{0,30}OS[ +](\d+)_(\d+)(?:_(\d+)|).{0,30} AppleNews\/\d+\.\d+(?:\.\d+|)'
|
767
834
|
family_replacement: 'Mobile Safari UI/WKWebView'
|
768
|
-
- regex: '(iPod|iPhone|iPad)
|
835
|
+
- regex: '(iPod|iPhone|iPad).{1,200}Version/(\d+)\.(\d+)(?:\.(\d+)|)'
|
769
836
|
family_replacement: 'Mobile Safari UI/WKWebView'
|
770
|
-
- regex: '(iPod|iPod touch|iPhone|iPad)
|
837
|
+
- regex: '(iPod|iPod touch|iPhone|iPad).{0,200} Safari'
|
771
838
|
family_replacement: 'Mobile Safari'
|
772
839
|
- regex: '(iPod|iPod touch|iPhone|iPad)'
|
773
840
|
family_replacement: 'Mobile Safari UI/WKWebView'
|
@@ -818,9 +885,9 @@ user_agent_parsers:
|
|
818
885
|
- regex: '(Nokia)[EN]?(\d+)'
|
819
886
|
|
820
887
|
# BlackBerry devices
|
821
|
-
- regex: '(PlayBook)
|
888
|
+
- regex: '(PlayBook).{1,200}RIM Tablet OS (\d+)\.(\d+)\.(\d+)'
|
822
889
|
family_replacement: 'BlackBerry WebKit'
|
823
|
-
- regex: '(Black[bB]erry|BB10)
|
890
|
+
- regex: '(Black[bB]erry|BB10).{1,200}Version/(\d+)\.(\d+)\.(\d+)'
|
824
891
|
family_replacement: 'BlackBerry WebKit'
|
825
892
|
- regex: '(Black[bB]erry)\s?(\d+)'
|
826
893
|
family_replacement: 'BlackBerry'
|
@@ -840,18 +907,15 @@ user_agent_parsers:
|
|
840
907
|
|
841
908
|
- regex: '(QtWeb) Internet Browser/(\d+)\.(\d+)'
|
842
909
|
|
843
|
-
#- regex: '\(iPad;.+(Version)/(\d+)\.(\d+)(?:\.(\d+)|).*Safari/'
|
844
|
-
# family_replacement: 'iPad'
|
845
|
-
|
846
910
|
# Phantomjs, should go before Safari
|
847
911
|
- regex: '(PhantomJS)/(\d+)\.(\d+)\.(\d+)'
|
848
912
|
|
849
913
|
# WebKit Nightly
|
850
|
-
- regex: '(AppleWebKit)/(\d+)(?:\.(\d+)|)\+
|
914
|
+
- regex: '(AppleWebKit)/(\d+)(?:\.(\d+)|)\+ .{0,200} Safari'
|
851
915
|
family_replacement: 'WebKit Nightly'
|
852
916
|
|
853
917
|
# Safari
|
854
|
-
- regex: '(Version)/(\d+)\.(\d+)(?:\.(\d+)|)
|
918
|
+
- regex: '(Version)/(\d+)\.(\d+)(?:\.(\d+)|).{0,100}Safari/'
|
855
919
|
family_replacement: 'Safari'
|
856
920
|
# Safari didn't provide "Version/d.d.d" prior to 3.0
|
857
921
|
- regex: '(Safari)/\d+'
|
@@ -897,9 +961,10 @@ user_agent_parsers:
|
|
897
961
|
# AFTER THE EDGE CASES ABOVE!
|
898
962
|
# AFTER IE11
|
899
963
|
# BEFORE all other IE
|
900
|
-
- regex: '(Firefox)/(\d+)\.(\d+)
|
964
|
+
- regex: '(Firefox)/(\d+)\.(\d+)(?:\.(\d+)|$)'
|
901
965
|
- regex: '(Firefox)/(\d+)\.(\d+)(pre|[ab]\d+[a-z]*|)'
|
902
966
|
|
967
|
+
|
903
968
|
- regex: '([MS]?IE) (\d+)\.(\d+)'
|
904
969
|
family_replacement: 'IE'
|
905
970
|
|
@@ -907,17 +972,58 @@ user_agent_parsers:
|
|
907
972
|
family_replacement: 'Python Requests'
|
908
973
|
|
909
974
|
# 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+)|)|)'
|
975
|
+
- 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+)|)|)'
|
976
|
+
|
977
|
+
# CloudFoundry
|
978
|
+
- regex: '^(cf)\/(\d+)\.(\d+)\.(\S+)'
|
979
|
+
family_replacement: 'CloudFoundry'
|
980
|
+
|
981
|
+
# SAP Leonardo
|
982
|
+
- regex: '^(sap-leonardo-iot-sdk-nodejs) \/ (\d+)\.(\d+)\.(\d+)'
|
983
|
+
|
984
|
+
# SAP Netweaver Application Server
|
985
|
+
- regex: '^(SAP NetWeaver Application Server) \(1.0;(\d{1})(\d{2})\)'
|
986
|
+
|
987
|
+
# HttpClient
|
988
|
+
- regex: '^(\w+-HTTPClient)\/(\d+)\.(\d+)-(\S+)'
|
989
|
+
family_replacement: 'HTTPClient'
|
990
|
+
|
991
|
+
# go-cli
|
992
|
+
- regex: '^(go-cli)\s(\d+)\.(\d+).(\S+)'
|
993
|
+
|
994
|
+
# Other Clients with the pattern <Name>/[v]<Major>.<Minor>[.<Patch>]
|
995
|
+
- regex: '^(Java-EurekaClient|Java-EurekaClient-Replication|HTTPClient|lua-resty-http)\/v?(\d+)\.(\d+)\.?(\d*)'
|
996
|
+
|
997
|
+
## Clints with the pattern <Name>
|
998
|
+
- regex: '^(ping-service|sap xsuaa|Node-oauth|Site24x7|SAP CPI|JAEGER_SECURITY)'
|
911
999
|
|
912
1000
|
# Asynchronous HTTP Client/Server for asyncio and Python (https://aiohttp.readthedocs.io/)
|
913
1001
|
- regex: '(Python/3\.\d{1,3} aiohttp)/(\d+)\.(\d+)\.(\d+)'
|
914
1002
|
family_replacement: 'Python aiohttp'
|
915
1003
|
|
916
|
-
- regex: '(Java)[/ ]?\d
|
1004
|
+
- regex: '(Java)[/ ]?\d{1}\.(\d+)\.(\d+)[_-]*([a-zA-Z0-9]+|)'
|
1005
|
+
|
1006
|
+
- regex: '(Java)[/ ]?(\d+)\.(\d+)\.(\d+)'
|
1007
|
+
|
1008
|
+
# minio-go (https://github.com/minio/minio-go)
|
1009
|
+
- regex: '(minio-go)/v(\d+)\.(\d+)\.(\d+)'
|
1010
|
+
|
1011
|
+
# ureq - minimal request library in rust (https://github.com/algesten/ureq)
|
1012
|
+
- regex: '^(ureq)[/ ](\d+)\.(\d+).(\d+)'
|
1013
|
+
|
1014
|
+
# http.rb - HTTP (The Gem! a.k.a. http.rb) - a fast Ruby HTTP client
|
1015
|
+
# (https://github.com/httprb/http/blob/3aa7470288deb81f7d7b982c1e2381871049dcbb/lib/http/request.rb#L27)
|
1016
|
+
- regex: '^(http\.rb)/(\d+)\.(\d+).(\d+)'
|
1017
|
+
|
1018
|
+
# Guzzle, PHP HTTP client (https://docs.guzzlephp.org/)
|
1019
|
+
- regex: '^(GuzzleHttp)/(\d+)\.(\d+).(\d+)'
|
1020
|
+
|
1021
|
+
# lorien/grab - Web Scraping Framework (https://github.com/lorien/grab)
|
1022
|
+
- regex: '^(grab)\b'
|
917
1023
|
|
918
1024
|
# Cloud Storage Clients
|
919
1025
|
- regex: '^(Cyberduck)/(\d+)\.(\d+)\.(\d+)(?:\.\d+|)'
|
920
|
-
- regex: '^(S3 Browser) (\d+)
|
1026
|
+
- regex: '^(S3 Browser) (\d+)[.-](\d+)[.-](\d+)(?:\s*https?://s3browser\.com|)'
|
921
1027
|
- regex: '(S3Gof3r)'
|
922
1028
|
# IBM COS (Cloud Object Storage) API
|
923
1029
|
- regex: '\b(ibm-cos-sdk-(?:core|java|js|python))/(\d+)\.(\d+)(?:\.(\d+)|)'
|
@@ -940,6 +1046,22 @@ user_agent_parsers:
|
|
940
1046
|
- regex: '^(ViaFree|Viafree)-(?:tvOS-)?[A-Z]{2}/(\d+)\.(\d+)\.(\d+)'
|
941
1047
|
family_replacement: 'ViaFree'
|
942
1048
|
|
1049
|
+
# Transmit (https://library.panic.com/transmit/)
|
1050
|
+
- regex: '(Transmit)/(\d+)\.(\d+)\.(\d+)'
|
1051
|
+
|
1052
|
+
# Download Master (https://downloadmaster.ru/)
|
1053
|
+
- regex: '(Download Master)'
|
1054
|
+
|
1055
|
+
# HTTrack crawler
|
1056
|
+
- regex: '\b(HTTrack) (\d+)\.(\d+)(?:[\.\-](\d+)|)'
|
1057
|
+
|
1058
|
+
# Ladybird Browser (https://ladybird.dev)
|
1059
|
+
# https://github.com/SerenityOS/serenity/blob/6a662e0d43810c1dbd56fbf0c123f258aa1d694e/Userland/Libraries/LibWeb/Loader/ResourceLoader.h#L64
|
1060
|
+
- regex: '(Ladybird)\/(\d+)\.(\d+)'
|
1061
|
+
|
1062
|
+
# MullvadBrowser (https://mullvad.net/en/browser)
|
1063
|
+
- regex: '(MullvadBrowser)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
|
1064
|
+
|
943
1065
|
os_parsers:
|
944
1066
|
##########
|
945
1067
|
# HbbTV vendors
|
@@ -955,7 +1077,7 @@ os_parsers:
|
|
955
1077
|
# Opera/9.80 (Linux armv7l; HbbTV/1.1.1 (; Sony; KDL32W650A; PKG3.211EUA; 2013;); ) Presto/2.12.362 Version/12.11
|
956
1078
|
# Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Sony; KDL40HX751; PKG1.902EUA; 2012;);; en) Presto/2.10.250 Version/11.60
|
957
1079
|
# 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)
|
1080
|
+
#- regex: 'HbbTV/\d+\.\d+\.\d+ \(; (Sony);.{0,200};.{0,200}; ([0-9]{4});\)'
|
959
1081
|
|
960
1082
|
|
961
1083
|
# LG is consistent too, but we need to add manually the year model
|
@@ -975,9 +1097,9 @@ os_parsers:
|
|
975
1097
|
os_replacement: 'Samsung'
|
976
1098
|
os_v1_replacement: '2011'
|
977
1099
|
# manage the two models of 2013
|
978
|
-
- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4})
|
1100
|
+
- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});.{0,200}FXPDEUC'
|
979
1101
|
os_v2_replacement: 'UE40F7000'
|
980
|
-
- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4})
|
1102
|
+
- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});.{0,200}MST12DEUC'
|
981
1103
|
os_v2_replacement: 'UE32F4500'
|
982
1104
|
# generic Samsung (works starting in 2012)
|
983
1105
|
#- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});'
|
@@ -985,26 +1107,26 @@ os_parsers:
|
|
985
1107
|
# Philips : not found any other way than a manual mapping
|
986
1108
|
# 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
1109
|
# 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)
|
1110
|
+
- regex: 'HbbTV/1\.1\.1 \(; (Philips);.{0,200}NETTV/4'
|
989
1111
|
os_v1_replacement: '2013'
|
990
|
-
- regex: 'HbbTV/1\.1\.1 \(; (Philips)
|
1112
|
+
- regex: 'HbbTV/1\.1\.1 \(; (Philips);.{0,200}NETTV/3'
|
991
1113
|
os_v1_replacement: '2012'
|
992
|
-
- regex: 'HbbTV/1\.1\.1 \(; (Philips)
|
1114
|
+
- regex: 'HbbTV/1\.1\.1 \(; (Philips);.{0,200}NETTV/2'
|
993
1115
|
os_v1_replacement: '2011'
|
994
1116
|
|
995
1117
|
# the HbbTV emulator developers use HbbTV/1.1.1 (;;;;;) firetv-firefox-plugin 1.1.20
|
996
|
-
- regex: 'HbbTV/\d+\.\d+\.\d
|
1118
|
+
- regex: 'HbbTV/\d+\.\d+\.\d+.{0,100}(firetv)-firefox-plugin (\d+).(\d+).(\d+)'
|
997
1119
|
os_replacement: 'FireHbbTV'
|
998
1120
|
|
999
1121
|
# 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+ \(
|
1122
|
+
- regex: 'HbbTV/\d+\.\d+\.\d+ \(.{0,30}; ?([a-zA-Z]+) ?;.{0,30}(201[1-9]).{0,30}\)'
|
1001
1123
|
|
1002
|
-
# aspiegel.com spider (owned by Huawei)
|
1003
|
-
- regex: 'AspiegelBot'
|
1124
|
+
# aspiegel.com spider (owned by Huawei, later renamed PetalBot)
|
1125
|
+
- regex: 'AspiegelBot|PetalBot'
|
1004
1126
|
os_replacement: 'Other'
|
1005
1127
|
|
1006
1128
|
##########
|
1007
|
-
# @note: Windows Phone needs to come before Windows NT 6.1
|
1129
|
+
# @note: Windows Phone needs to come before Windows NT 6.1 {0,2}and* before Android to catch cases such as:
|
1008
1130
|
# 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
1131
|
# 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
1132
|
# 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,16 +1135,39 @@ os_parsers:
|
|
1013
1135
|
|
1014
1136
|
- regex: '(Windows Phone) (?:OS[ /])?(\d+)\.(\d+)'
|
1015
1137
|
|
1016
|
-
# Again a MS-special one: iPhone
|
1017
|
-
- regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+)|)
|
1138
|
+
# Again a MS-special one: iPhone.{0,200}Outlook-iOS-Android/x.x is erroneously detected as Android
|
1139
|
+
- regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+)|).{0,100}Outlook-iOS-Android'
|
1018
1140
|
os_replacement: 'iOS'
|
1019
1141
|
|
1020
1142
|
# Special case for old ArcGIS Mobile products
|
1021
|
-
- regex: 'ArcGIS\.?(iOS|Android)-\d+\.\d+(?:\.\d+|)(?:[^\/]
|
1143
|
+
- regex: 'ArcGIS\.?(iOS|Android)-\d+\.\d+(?:\.\d+|)(?:[^\/]{1,50}|)\/(\d+)(?:\.(\d+)(?:\.(\d+)|)|)'
|
1022
1144
|
|
1023
1145
|
# Special case for new ArcGIS Mobile products
|
1024
1146
|
- regex: 'ArcGISRuntime-(?:Android|iOS)\/\d+\.\d+(?:\.\d+|) \((Android|iOS) (\d+)(?:\.(\d+)(?:\.(\d+)|)|);'
|
1025
1147
|
|
1148
|
+
##########
|
1149
|
+
# Chromecast
|
1150
|
+
##########
|
1151
|
+
# Ex: Mozilla/5.0 (Linux; Android 12.0; Build/STTL.240206.002) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.0 Safari/537.36 CrKey/1.56.500000 DeviceType/AndroidTV
|
1152
|
+
# These are the newer Android-based "Google TV" Chromecast devices.
|
1153
|
+
# Google stopped updating the Chromecast firmware version in these, so they always say CrKey/1.56.500000. Therefore we extract the more useful Android version instead.
|
1154
|
+
- regex: '(Android) (\d+)(?:\.(\d+)).*CrKey'
|
1155
|
+
os_replacement: 'Chromecast Android'
|
1156
|
+
|
1157
|
+
# Ex: Mozilla/5.0 (Fuchsia) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 CrKey/1.56.500000
|
1158
|
+
# These are some intermediate "Nest Hub" Chromecast devices running Fuchsia.
|
1159
|
+
- regex: 'Fuchsia.*(CrKey)(?:[/](\d+)\.(\d+)(?:\.(\d+)|)|)'
|
1160
|
+
os_replacement: 'Chromecast Fuchsia'
|
1161
|
+
|
1162
|
+
# Ex: Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.225 Safari/537.36 CrKey/1.56.500000 DeviceType/SmartSpeaker
|
1163
|
+
- regex: 'Linux.*(CrKey)(?:[/](\d+)\.(\d+)(?:\.(\d+)|)|).*DeviceType/SmartSpeaker'
|
1164
|
+
os_replacement: 'Chromecast SmartSpeaker'
|
1165
|
+
|
1166
|
+
# Ex: Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.225 Safari/537.36 CrKey/1.56.500000 DeviceType/Chromecast
|
1167
|
+
# These are the oldest Chromecast devices that ran Linux.
|
1168
|
+
- regex: 'Linux.*(CrKey)(?:[/](\d+)\.(\d+)(?:\.(\d+)|)|)'
|
1169
|
+
os_replacement: 'Chromecast Linux'
|
1170
|
+
|
1026
1171
|
##########
|
1027
1172
|
# Android
|
1028
1173
|
# can actually detect rooted android os. do we care?
|
@@ -1050,22 +1195,29 @@ os_parsers:
|
|
1050
1195
|
|
1051
1196
|
# Android 9; Android 10;
|
1052
1197
|
- regex: '(Android) (\d+);'
|
1198
|
+
- regex: '(Android): (\d+)(?:\.(\d+)(?:\.(\d+)|)|);'
|
1053
1199
|
|
1054
1200
|
# UCWEB
|
1055
|
-
- regex: '^UCWEB
|
1201
|
+
- regex: '^UCWEB.{0,200}; (Adr) (\d+)\.(\d+)(?:[.\-]([a-z0-9]{1,100})|);'
|
1056
1202
|
os_replacement: 'Android'
|
1057
|
-
- regex: '^UCWEB
|
1203
|
+
- regex: '^UCWEB.{0,200}; (iPad|iPh|iPd) OS (\d+)_(\d+)(?:_(\d+)|);'
|
1058
1204
|
os_replacement: 'iOS'
|
1059
|
-
- regex: '^UCWEB
|
1205
|
+
- regex: '^UCWEB.{0,200}; (wds) (\d+)\.(\d+)(?:\.(\d+)|);'
|
1060
1206
|
os_replacement: 'Windows Phone'
|
1061
1207
|
# JUC
|
1062
|
-
- regex: '^(JUC)
|
1208
|
+
- regex: '^(JUC).{0,200}; ?U; ?(?:Android|)(\d+)\.(\d+)(?:[\.\-]([a-z0-9]{1,100})|)'
|
1063
1209
|
os_replacement: 'Android'
|
1064
1210
|
|
1065
1211
|
# Salesforce
|
1066
1212
|
- regex: '(android)\s(?:mobile\/)(\d+)(?:\.(\d+)(?:\.(\d+)|)|)'
|
1067
1213
|
os_replacement: 'Android'
|
1068
1214
|
|
1215
|
+
##########
|
1216
|
+
# Meta Quest
|
1217
|
+
##########
|
1218
|
+
- regex: 'Quest'
|
1219
|
+
os_replacement: 'Android'
|
1220
|
+
|
1069
1221
|
##########
|
1070
1222
|
# Kindle Android
|
1071
1223
|
##########
|
@@ -1077,7 +1229,7 @@ os_parsers:
|
|
1077
1229
|
# properly identify as Chrome OS
|
1078
1230
|
#
|
1079
1231
|
# 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+)
|
1232
|
+
- regex: '(x86_64|aarch64)\ (\d+)\.(\d+)\.(\d+).{0,100}Chrome.{0,100}(?:CitrixChromeApp)$'
|
1081
1233
|
os_replacement: 'Chrome OS'
|
1082
1234
|
|
1083
1235
|
##########
|
@@ -1169,7 +1321,7 @@ os_parsers:
|
|
1169
1321
|
os_v1_replacement: '95'
|
1170
1322
|
|
1171
1323
|
# Box apps (Drive, Sync, Notes) on Windows https://www.box.com/resources/downloads
|
1172
|
-
- regex: '^Box
|
1324
|
+
- regex: '^Box.{0,200}Windows/([\d.]+);'
|
1173
1325
|
os_replacement: 'Windows'
|
1174
1326
|
os_v1_replacement: '$1'
|
1175
1327
|
|
@@ -1179,6 +1331,10 @@ os_parsers:
|
|
1179
1331
|
##########
|
1180
1332
|
- regex: '(Tizen)[/ ](\d+)\.(\d+)'
|
1181
1333
|
|
1334
|
+
# Chrome and Edge on iOS with desktop mode contains Mac OS X, so it must be before any Mac OS check
|
1335
|
+
- regex: 'Intel Mac OS X.+(CriOS|EdgiOS)/\d+'
|
1336
|
+
os_replacement: 'iOS'
|
1337
|
+
|
1182
1338
|
##########
|
1183
1339
|
# Mac OS
|
1184
1340
|
# @ref: http://en.wikipedia.org/wiki/Mac_OS_X#Versions
|
@@ -1186,33 +1342,33 @@ os_parsers:
|
|
1186
1342
|
##########
|
1187
1343
|
- regex: '((?:Mac[ +]?|; )OS[ +]X)[\s+/](?:(\d+)[_.](\d+)(?:[_.](\d+)|)|Mach-O)'
|
1188
1344
|
os_replacement: 'Mac OS X'
|
1189
|
-
- regex: '
|
1345
|
+
- regex: 'Mac OS X\s.{1,50}\s(\d+).(\d+).(\d+)'
|
1190
1346
|
os_replacement: 'Mac OS X'
|
1191
1347
|
os_v1_replacement: '$1'
|
1192
1348
|
os_v2_replacement: '$2'
|
1193
1349
|
os_v3_replacement: '$3'
|
1194
1350
|
# Leopard
|
1195
|
-
- regex: ' (Dar)(win)/(9).(\d+)
|
1351
|
+
- regex: ' (Dar)(win)/(9).(\d+).{0,100}\((?:i386|x86_64|Power Macintosh)\)'
|
1196
1352
|
os_replacement: 'Mac OS X'
|
1197
1353
|
os_v1_replacement: '10'
|
1198
1354
|
os_v2_replacement: '5'
|
1199
1355
|
# Snow Leopard
|
1200
|
-
- regex: ' (Dar)(win)/(10).(\d+)
|
1356
|
+
- regex: ' (Dar)(win)/(10).(\d+).{0,100}\((?:i386|x86_64)\)'
|
1201
1357
|
os_replacement: 'Mac OS X'
|
1202
1358
|
os_v1_replacement: '10'
|
1203
1359
|
os_v2_replacement: '6'
|
1204
1360
|
# Lion
|
1205
|
-
- regex: ' (Dar)(win)/(11).(\d+)
|
1361
|
+
- regex: ' (Dar)(win)/(11).(\d+).{0,100}\((?:i386|x86_64)\)'
|
1206
1362
|
os_replacement: 'Mac OS X'
|
1207
1363
|
os_v1_replacement: '10'
|
1208
1364
|
os_v2_replacement: '7'
|
1209
1365
|
# Mountain Lion
|
1210
|
-
- regex: ' (Dar)(win)/(12).(\d+)
|
1366
|
+
- regex: ' (Dar)(win)/(12).(\d+).{0,100}\((?:i386|x86_64)\)'
|
1211
1367
|
os_replacement: 'Mac OS X'
|
1212
1368
|
os_v1_replacement: '10'
|
1213
1369
|
os_v2_replacement: '8'
|
1214
1370
|
# Mavericks
|
1215
|
-
- regex: ' (Dar)(win)/(13).(\d+)
|
1371
|
+
- regex: ' (Dar)(win)/(13).(\d+).{0,100}\((?:i386|x86_64)\)'
|
1216
1372
|
os_replacement: 'Mac OS X'
|
1217
1373
|
os_v1_replacement: '10'
|
1218
1374
|
os_v2_replacement: '9'
|
@@ -1229,7 +1385,7 @@ os_parsers:
|
|
1229
1385
|
- regex: '(?:PPC|Intel) (Mac OS X)'
|
1230
1386
|
|
1231
1387
|
# Box Drive and Box Sync on Mac OS X use OSX version numbers, not Darwin
|
1232
|
-
- regex: '^Box
|
1388
|
+
- regex: '^Box.{0,200};(Darwin)/(10)\.(1\d)(?:\.(\d+)|)'
|
1233
1389
|
os_replacement: 'Mac OS X'
|
1234
1390
|
|
1235
1391
|
##########
|
@@ -1240,7 +1396,7 @@ os_parsers:
|
|
1240
1396
|
- regex: '(Apple\s?TV)(?:/(\d+)\.(\d+)|)'
|
1241
1397
|
os_replacement: 'ATV OS X'
|
1242
1398
|
|
1243
|
-
- regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+)|)'
|
1399
|
+
- regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+)|)'
|
1244
1400
|
os_replacement: 'iOS'
|
1245
1401
|
|
1246
1402
|
# remaining cases are mostly only opera uas, so catch opera as to not catch iphone spoofs
|
@@ -1248,15 +1404,15 @@ os_parsers:
|
|
1248
1404
|
os_replacement: 'iOS'
|
1249
1405
|
|
1250
1406
|
# few more stragglers
|
1251
|
-
- regex: '(iPhone|iPad|iPod)
|
1407
|
+
- regex: '(iPhone|iPad|iPod).{0,100}Mac OS X.{0,100}Version/(\d+)\.(\d+)'
|
1252
1408
|
os_replacement: 'iOS'
|
1253
1409
|
|
1254
1410
|
# CFNetwork/Darwin - The specific CFNetwork or Darwin version determines
|
1255
1411
|
# whether the os maps to Mac OS, or iOS, or just Darwin.
|
1256
1412
|
# See: http://user-agents.me/cfnetwork-version-list
|
1257
|
-
- regex: '(CFNetwork)/(5)48\.0\.3
|
1413
|
+
- regex: '(CFNetwork)/(5)48\.0\.3.{0,100} Darwin/11\.0\.0'
|
1258
1414
|
os_replacement: 'iOS'
|
1259
|
-
- regex: '(CFNetwork)/(5)48\.(0)\.4
|
1415
|
+
- regex: '(CFNetwork)/(5)48\.(0)\.4.{0,100} Darwin/(1)1\.0\.0'
|
1260
1416
|
os_replacement: 'iOS'
|
1261
1417
|
- regex: '(CFNetwork)/(5)48\.(1)\.4'
|
1262
1418
|
os_replacement: 'iOS'
|
@@ -1291,17 +1447,17 @@ os_parsers:
|
|
1291
1447
|
os_replacement: 'Mac OS X'
|
1292
1448
|
os_v1_replacement: '10'
|
1293
1449
|
os_v2_replacement: '11'
|
1294
|
-
- regex: 'CFNetwork/7
|
1450
|
+
- regex: 'CFNetwork/7.{0,100} Darwin/15\.4\.\d+'
|
1295
1451
|
os_replacement: 'iOS'
|
1296
1452
|
os_v1_replacement: '9'
|
1297
1453
|
os_v2_replacement: '3'
|
1298
1454
|
os_v3_replacement: '1'
|
1299
|
-
- regex: 'CFNetwork/7
|
1455
|
+
- regex: 'CFNetwork/7.{0,100} Darwin/15\.5\.\d+'
|
1300
1456
|
os_replacement: 'iOS'
|
1301
1457
|
os_v1_replacement: '9'
|
1302
1458
|
os_v2_replacement: '3'
|
1303
1459
|
os_v3_replacement: '2'
|
1304
|
-
- regex: 'CFNetwork/7
|
1460
|
+
- regex: 'CFNetwork/7.{0,100} Darwin/15\.6\.\d+'
|
1305
1461
|
os_replacement: 'iOS'
|
1306
1462
|
os_v1_replacement: '9'
|
1307
1463
|
os_v2_replacement: '3'
|
@@ -1322,15 +1478,15 @@ os_parsers:
|
|
1322
1478
|
# CFNetwork macOS Apps (must be before CFNetwork iOS Apps
|
1323
1479
|
# @ref: https://en.wikipedia.org/wiki/Darwin_(operating_system)#Release_history
|
1324
1480
|
##########
|
1325
|
-
- regex: 'CFNetwork
|
1481
|
+
- regex: 'CFNetwork/.{0,100} Darwin/17\.\d+.{0,100}\(x86_64\)'
|
1326
1482
|
os_replacement: 'Mac OS X'
|
1327
1483
|
os_v1_replacement: '10'
|
1328
1484
|
os_v2_replacement: '13'
|
1329
|
-
- regex: 'CFNetwork
|
1485
|
+
- regex: 'CFNetwork/.{0,100} Darwin/16\.\d+.{0,100}\(x86_64\)'
|
1330
1486
|
os_replacement: 'Mac OS X'
|
1331
1487
|
os_v1_replacement: '10'
|
1332
1488
|
os_v2_replacement: '12'
|
1333
|
-
- regex: 'CFNetwork/8
|
1489
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/15\.\d+.{0,100}\(x86_64\)'
|
1334
1490
|
os_replacement: 'Mac OS X'
|
1335
1491
|
os_v1_replacement: '10'
|
1336
1492
|
os_v2_replacement: '11'
|
@@ -1338,87 +1494,208 @@ os_parsers:
|
|
1338
1494
|
# CFNetwork iOS Apps
|
1339
1495
|
# @ref: https://en.wikipedia.org/wiki/Darwin_(operating_system)#Release_history
|
1340
1496
|
##########
|
1341
|
-
- regex: 'CFNetwork
|
1497
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(9)\.\d+'
|
1342
1498
|
os_replacement: 'iOS'
|
1343
1499
|
os_v1_replacement: '1'
|
1344
|
-
- regex: 'CFNetwork
|
1500
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(10)\.\d+'
|
1345
1501
|
os_replacement: 'iOS'
|
1346
1502
|
os_v1_replacement: '4'
|
1347
|
-
- regex: 'CFNetwork
|
1503
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(11)\.\d+'
|
1348
1504
|
os_replacement: 'iOS'
|
1349
1505
|
os_v1_replacement: '5'
|
1350
|
-
- regex: 'CFNetwork
|
1506
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(13)\.\d+'
|
1351
1507
|
os_replacement: 'iOS'
|
1352
1508
|
os_v1_replacement: '6'
|
1353
|
-
- regex: 'CFNetwork/6
|
1509
|
+
- regex: 'CFNetwork/6.{0,100} Darwin/(14)\.\d+'
|
1354
1510
|
os_replacement: 'iOS'
|
1355
1511
|
os_v1_replacement: '7'
|
1356
|
-
- regex: 'CFNetwork/7
|
1512
|
+
- regex: 'CFNetwork/7.{0,100} Darwin/(14)\.\d+'
|
1357
1513
|
os_replacement: 'iOS'
|
1358
1514
|
os_v1_replacement: '8'
|
1359
1515
|
os_v2_replacement: '0'
|
1360
|
-
- regex: 'CFNetwork/7
|
1516
|
+
- regex: 'CFNetwork/7.{0,100} Darwin/(15)\.\d+'
|
1361
1517
|
os_replacement: 'iOS'
|
1362
1518
|
os_v1_replacement: '9'
|
1363
1519
|
os_v2_replacement: '0'
|
1364
|
-
- regex: 'CFNetwork/8
|
1520
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/16\.5\.\d+'
|
1365
1521
|
os_replacement: 'iOS'
|
1366
1522
|
os_v1_replacement: '10'
|
1367
1523
|
os_v2_replacement: '3'
|
1368
|
-
- regex: 'CFNetwork/8
|
1524
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/16\.6\.\d+'
|
1369
1525
|
os_replacement: 'iOS'
|
1370
1526
|
os_v1_replacement: '10'
|
1371
1527
|
os_v2_replacement: '3'
|
1372
1528
|
os_v3_replacement: '2'
|
1373
|
-
- regex: 'CFNetwork/8
|
1529
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/16\.7\.\d+'
|
1374
1530
|
os_replacement: 'iOS'
|
1375
1531
|
os_v1_replacement: '10'
|
1376
1532
|
os_v2_replacement: '3'
|
1377
1533
|
os_v3_replacement: '3'
|
1378
|
-
- regex: 'CFNetwork/8
|
1534
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/(16)\.\d+'
|
1379
1535
|
os_replacement: 'iOS'
|
1380
1536
|
os_v1_replacement: '10'
|
1381
|
-
- regex: 'CFNetwork/8
|
1537
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/17\.0\.\d+'
|
1382
1538
|
os_replacement: 'iOS'
|
1383
1539
|
os_v1_replacement: '11'
|
1384
1540
|
os_v2_replacement: '0'
|
1385
|
-
- regex: 'CFNetwork/8
|
1541
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/17\.2\.\d+'
|
1386
1542
|
os_replacement: 'iOS'
|
1387
1543
|
os_v1_replacement: '11'
|
1388
1544
|
os_v2_replacement: '1'
|
1389
|
-
- regex: 'CFNetwork/8
|
1545
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/17\.3\.\d+'
|
1390
1546
|
os_replacement: 'iOS'
|
1391
1547
|
os_v1_replacement: '11'
|
1392
1548
|
os_v2_replacement: '2'
|
1393
|
-
- regex: 'CFNetwork/8
|
1549
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/17\.4\.\d+'
|
1394
1550
|
os_replacement: 'iOS'
|
1395
1551
|
os_v1_replacement: '11'
|
1396
1552
|
os_v2_replacement: '2'
|
1397
1553
|
os_v3_replacement: '6'
|
1398
|
-
- regex: 'CFNetwork/8
|
1554
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/17\.5\.\d+'
|
1399
1555
|
os_replacement: 'iOS'
|
1400
1556
|
os_v1_replacement: '11'
|
1401
1557
|
os_v2_replacement: '3'
|
1402
|
-
- regex: 'CFNetwork/9
|
1558
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/17\.6\.\d+'
|
1403
1559
|
os_replacement: 'iOS'
|
1404
1560
|
os_v1_replacement: '11'
|
1405
1561
|
os_v2_replacement: '4'
|
1406
|
-
- regex: 'CFNetwork/9
|
1562
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/17\.7\.\d+'
|
1407
1563
|
os_replacement: 'iOS'
|
1408
1564
|
os_v1_replacement: '11'
|
1409
1565
|
os_v2_replacement: '4'
|
1410
1566
|
os_v3_replacement: '1'
|
1411
|
-
- regex: 'CFNetwork/8
|
1567
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/(17)\.\d+'
|
1412
1568
|
os_replacement: 'iOS'
|
1413
1569
|
os_v1_replacement: '11'
|
1414
|
-
- regex: 'CFNetwork/9
|
1570
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/18\.0\.\d+'
|
1415
1571
|
os_replacement: 'iOS'
|
1416
1572
|
os_v1_replacement: '12'
|
1417
1573
|
os_v2_replacement: '0'
|
1418
|
-
- regex: 'CFNetwork/9
|
1574
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/18\.2\.\d+'
|
1419
1575
|
os_replacement: 'iOS'
|
1420
1576
|
os_v1_replacement: '12'
|
1421
|
-
|
1577
|
+
os_v2_replacement: '1'
|
1578
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/18\.5\.\d+'
|
1579
|
+
os_replacement: 'iOS'
|
1580
|
+
os_v1_replacement: '12'
|
1581
|
+
os_v2_replacement: '2'
|
1582
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/18\.6\.\d+'
|
1583
|
+
os_replacement: 'iOS'
|
1584
|
+
os_v1_replacement: '12'
|
1585
|
+
os_v2_replacement: '3'
|
1586
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/18\.7\.\d+'
|
1587
|
+
os_replacement: 'iOS'
|
1588
|
+
os_v1_replacement: '12'
|
1589
|
+
os_v2_replacement: '4'
|
1590
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/(18)\.\d+'
|
1591
|
+
os_replacement: 'iOS'
|
1592
|
+
os_v1_replacement: '12'
|
1593
|
+
- regex: 'CFNetwork/11.{0,100} Darwin/19\.2\.\d+'
|
1594
|
+
os_replacement: 'iOS'
|
1595
|
+
os_v1_replacement: '13'
|
1596
|
+
os_v2_replacement: '3'
|
1597
|
+
- regex: 'CFNetwork/11.{0,100} Darwin/19\.3\.\d+'
|
1598
|
+
os_replacement: 'iOS'
|
1599
|
+
os_v1_replacement: '13'
|
1600
|
+
os_v2_replacement: '3'
|
1601
|
+
os_v3_replacement: '1'
|
1602
|
+
- regex: 'CFNetwork/11.{0,100} Darwin/19\.4\.\d+'
|
1603
|
+
os_replacement: 'iOS'
|
1604
|
+
os_v1_replacement: '13'
|
1605
|
+
os_v2_replacement: '4'
|
1606
|
+
- regex: 'CFNetwork/11.{0,100} Darwin/19\.5\.\d+'
|
1607
|
+
os_replacement: 'iOS'
|
1608
|
+
os_v1_replacement: '13'
|
1609
|
+
os_v2_replacement: '5'
|
1610
|
+
- regex: 'CFNetwork/11.{0,100} Darwin/19\.6\.\d+'
|
1611
|
+
os_replacement: 'iOS'
|
1612
|
+
os_v1_replacement: '13'
|
1613
|
+
os_v2_replacement: '6'
|
1614
|
+
- regex: 'CFNetwork/1[01].{0,100} Darwin/19\.\d+'
|
1615
|
+
os_replacement: 'iOS'
|
1616
|
+
os_v1_replacement: '13'
|
1617
|
+
- regex: 'CFNetwork/12.{0,100} Darwin/20\.1\.\d+'
|
1618
|
+
os_replacement: 'iOS'
|
1619
|
+
os_v1_replacement: '14'
|
1620
|
+
os_v2_replacement: '2'
|
1621
|
+
- regex: 'CFNetwork/12.{0,100} Darwin/20\.2\.\d+'
|
1622
|
+
os_replacement: 'iOS'
|
1623
|
+
os_v1_replacement: '14'
|
1624
|
+
os_v2_replacement: '3'
|
1625
|
+
- regex: 'CFNetwork/12.{0,100} Darwin/20\.3\.\d+'
|
1626
|
+
os_replacement: 'iOS'
|
1627
|
+
os_v1_replacement: '14'
|
1628
|
+
os_v2_replacement: '4'
|
1629
|
+
- regex: 'CFNetwork/12.{0,100} Darwin/20\.4\.\d+'
|
1630
|
+
os_replacement: 'iOS'
|
1631
|
+
os_v1_replacement: '14'
|
1632
|
+
os_v2_replacement: '5'
|
1633
|
+
- regex: 'CFNetwork/12.{0,100} Darwin/20\.5\.\d+'
|
1634
|
+
os_replacement: 'iOS'
|
1635
|
+
os_v1_replacement: '14'
|
1636
|
+
os_v2_replacement: '6'
|
1637
|
+
- regex: 'CFNetwork/12.{0,100} Darwin/20\.6\.\d+'
|
1638
|
+
os_replacement: 'iOS'
|
1639
|
+
os_v1_replacement: '14'
|
1640
|
+
os_v2_replacement: '8'
|
1641
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(20)\.\d+'
|
1642
|
+
os_replacement: 'iOS'
|
1643
|
+
os_v1_replacement: '14'
|
1644
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.0\.\d+'
|
1645
|
+
os_replacement: 'iOS'
|
1646
|
+
os_v1_replacement: '15'
|
1647
|
+
os_v2_replacement: '0'
|
1648
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.1\.\d+'
|
1649
|
+
os_replacement: 'iOS'
|
1650
|
+
os_v1_replacement: '15'
|
1651
|
+
os_v2_replacement: '1'
|
1652
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.2\.\d+'
|
1653
|
+
os_replacement: 'iOS'
|
1654
|
+
os_v1_replacement: '15'
|
1655
|
+
os_v2_replacement: '2'
|
1656
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.3\.\d+'
|
1657
|
+
os_replacement: 'iOS'
|
1658
|
+
os_v1_replacement: '15'
|
1659
|
+
os_v2_replacement: '3'
|
1660
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.4\.\d+'
|
1661
|
+
os_replacement: 'iOS'
|
1662
|
+
os_v1_replacement: '15'
|
1663
|
+
os_v2_replacement: '4'
|
1664
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.5\.\d+'
|
1665
|
+
os_replacement: 'iOS'
|
1666
|
+
os_v1_replacement: '15'
|
1667
|
+
os_v2_replacement: '5'
|
1668
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.6\.\d+'
|
1669
|
+
os_replacement: 'iOS'
|
1670
|
+
os_v1_replacement: '15'
|
1671
|
+
os_v2_replacement: '6'
|
1672
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(21)\.\d+'
|
1673
|
+
os_replacement: 'iOS'
|
1674
|
+
os_v1_replacement: '15'
|
1675
|
+
- regex: 'CFNetwork/.{0,100} Darwin/22\.0\.\d+'
|
1676
|
+
os_replacement: 'iOS'
|
1677
|
+
os_v1_replacement: '16'
|
1678
|
+
os_v2_replacement: '0'
|
1679
|
+
- regex: 'CFNetwork/.{0,100} Darwin/22\.1\.\d+'
|
1680
|
+
os_replacement: 'iOS'
|
1681
|
+
os_v1_replacement: '16'
|
1682
|
+
os_v2_replacement: '1'
|
1683
|
+
- regex: 'CFNetwork/.{0,100} Darwin/22\.2\.\d+'
|
1684
|
+
os_replacement: 'iOS'
|
1685
|
+
os_v1_replacement: '16'
|
1686
|
+
os_v2_replacement: '2'
|
1687
|
+
- regex: 'CFNetwork/.{0,100} Darwin/22\.3\.\d+'
|
1688
|
+
os_replacement: 'iOS'
|
1689
|
+
os_v1_replacement: '16'
|
1690
|
+
os_v2_replacement: '3'
|
1691
|
+
- regex: 'CFNetwork/.{0,100} Darwin/22\.4\.\d+'
|
1692
|
+
os_replacement: 'iOS'
|
1693
|
+
os_v1_replacement: '16'
|
1694
|
+
os_v2_replacement: '4'
|
1695
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(22)\.\d+'
|
1696
|
+
os_replacement: 'iOS'
|
1697
|
+
os_v1_replacement: '16'
|
1698
|
+
- regex: 'CFNetwork/.{0,100} Darwin/'
|
1422
1699
|
os_replacement: 'iOS'
|
1423
1700
|
|
1424
1701
|
# iOS Apps
|
@@ -1429,7 +1706,7 @@ os_parsers:
|
|
1429
1706
|
##########
|
1430
1707
|
# Apple Watch
|
1431
1708
|
##########
|
1432
|
-
- regex: '(watchOS)/(\d+)\.(\d+)(?:\.(\d+)|)'
|
1709
|
+
- regex: '(watchOS)[/ ](\d+)\.(\d+)(?:\.(\d+)|)'
|
1433
1710
|
os_replacement: 'WatchOS'
|
1434
1711
|
|
1435
1712
|
##########################
|
@@ -1472,9 +1749,9 @@ os_parsers:
|
|
1472
1749
|
##########
|
1473
1750
|
- regex: '(Symbian[Oo][Ss])[/ ](\d+)\.(\d+)'
|
1474
1751
|
os_replacement: 'Symbian OS'
|
1475
|
-
- regex: '(Symbian/3)
|
1752
|
+
- regex: '(Symbian/3).{1,200}NokiaBrowser/7\.3'
|
1476
1753
|
os_replacement: 'Symbian^3 Anna'
|
1477
|
-
- regex: '(Symbian/3)
|
1754
|
+
- regex: '(Symbian/3).{1,200}NokiaBrowser/7\.4'
|
1478
1755
|
os_replacement: 'Symbian^3 Belle'
|
1479
1756
|
- regex: '(Symbian/3)'
|
1480
1757
|
os_replacement: 'Symbian^3'
|
@@ -1491,11 +1768,11 @@ os_parsers:
|
|
1491
1768
|
##########
|
1492
1769
|
# BlackBerry devices
|
1493
1770
|
##########
|
1494
|
-
- regex: '(BB10)
|
1771
|
+
- regex: '(BB10);.{1,200}Version/(\d+)\.(\d+)\.(\d+)'
|
1495
1772
|
os_replacement: 'BlackBerry OS'
|
1496
1773
|
- regex: '(Black[Bb]erry)[0-9a-z]+/(\d+)\.(\d+)\.(\d+)(?:\.(\d+)|)'
|
1497
1774
|
os_replacement: 'BlackBerry OS'
|
1498
|
-
- regex: '(Black[Bb]erry)
|
1775
|
+
- regex: '(Black[Bb]erry).{1,200}Version/(\d+)\.(\d+)\.(\d+)(?:\.(\d+)|)'
|
1499
1776
|
os_replacement: 'BlackBerry OS'
|
1500
1777
|
- regex: '(RIM Tablet OS) (\d+)\.(\d+)\.(\d+)'
|
1501
1778
|
os_replacement: 'BlackBerry Tablet OS'
|
@@ -1513,44 +1790,44 @@ os_parsers:
|
|
1513
1790
|
##########
|
1514
1791
|
# Firefox OS
|
1515
1792
|
##########
|
1516
|
-
- regex: '\((?:Mobile|Tablet)
|
1793
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/18.0 Firefox/\d+\.\d+'
|
1517
1794
|
os_replacement: 'Firefox OS'
|
1518
1795
|
os_v1_replacement: '1'
|
1519
1796
|
os_v2_replacement: '0'
|
1520
1797
|
os_v3_replacement: '1'
|
1521
1798
|
|
1522
|
-
- regex: '\((?:Mobile|Tablet)
|
1799
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/18.1 Firefox/\d+\.\d+'
|
1523
1800
|
os_replacement: 'Firefox OS'
|
1524
1801
|
os_v1_replacement: '1'
|
1525
1802
|
os_v2_replacement: '1'
|
1526
1803
|
|
1527
|
-
- regex: '\((?:Mobile|Tablet)
|
1804
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/26.0 Firefox/\d+\.\d+'
|
1528
1805
|
os_replacement: 'Firefox OS'
|
1529
1806
|
os_v1_replacement: '1'
|
1530
1807
|
os_v2_replacement: '2'
|
1531
1808
|
|
1532
|
-
- regex: '\((?:Mobile|Tablet)
|
1809
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/28.0 Firefox/\d+\.\d+'
|
1533
1810
|
os_replacement: 'Firefox OS'
|
1534
1811
|
os_v1_replacement: '1'
|
1535
1812
|
os_v2_replacement: '3'
|
1536
1813
|
|
1537
|
-
- regex: '\((?:Mobile|Tablet)
|
1814
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/30.0 Firefox/\d+\.\d+'
|
1538
1815
|
os_replacement: 'Firefox OS'
|
1539
1816
|
os_v1_replacement: '1'
|
1540
1817
|
os_v2_replacement: '4'
|
1541
1818
|
|
1542
|
-
- regex: '\((?:Mobile|Tablet)
|
1819
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/32.0 Firefox/\d+\.\d+'
|
1543
1820
|
os_replacement: 'Firefox OS'
|
1544
1821
|
os_v1_replacement: '2'
|
1545
1822
|
os_v2_replacement: '0'
|
1546
1823
|
|
1547
|
-
- regex: '\((?:Mobile|Tablet)
|
1824
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/34.0 Firefox/\d+\.\d+'
|
1548
1825
|
os_replacement: 'Firefox OS'
|
1549
1826
|
os_v1_replacement: '2'
|
1550
1827
|
os_v2_replacement: '1'
|
1551
1828
|
|
1552
1829
|
# Firefox OS Generic
|
1553
|
-
- regex: '\((?:Mobile|Tablet)
|
1830
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Firefox/\d+\.\d+'
|
1554
1831
|
os_replacement: 'Firefox OS'
|
1555
1832
|
|
1556
1833
|
|
@@ -1572,12 +1849,6 @@ os_parsers:
|
|
1572
1849
|
|
1573
1850
|
- regex: '(WebTV)/(\d+).(\d+)'
|
1574
1851
|
|
1575
|
-
##########
|
1576
|
-
# Chromecast
|
1577
|
-
##########
|
1578
|
-
- regex: '(CrKey)(?:[/](\d+)\.(\d+)(?:\.(\d+)|)|)'
|
1579
|
-
os_replacement: 'Chromecast'
|
1580
|
-
|
1581
1852
|
##########
|
1582
1853
|
# Misc mobile
|
1583
1854
|
##########
|
@@ -1592,7 +1863,7 @@ os_parsers:
|
|
1592
1863
|
- regex: '(Fedora|Red Hat|PCLinuxOS|Puppy|Ubuntu|Kindle|Bada|Sailfish|Lubuntu|BackTrack|Slackware|(?:Free|Open|Net|\b)BSD)[/ ](\d+)\.(\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
|
1593
1864
|
|
1594
1865
|
# Gentoo Linux + Kernel Version
|
1595
|
-
- regex: '(Linux)[ /](\d+)\.(\d+)(?:\.(\d+)|)
|
1866
|
+
- regex: '(Linux)[ /](\d+)\.(\d+)(?:\.(\d+)|).{0,100}gentoo'
|
1596
1867
|
os_replacement: 'Gentoo'
|
1597
1868
|
|
1598
1869
|
# Opera Mini Bada
|
@@ -1600,7 +1871,7 @@ os_parsers:
|
|
1600
1871
|
|
1601
1872
|
# just os
|
1602
1873
|
- 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)'
|
1874
|
+
- regex: '(Ubuntu|Kubuntu|Arch Linux|CentOS|Slackware|Gentoo|openSUSE|SUSE|Red Hat|Fedora|PCLinuxOS|Mageia|SerenityOS|(?:Free|Open|Net|\b)BSD)'
|
1604
1875
|
# Linux + Kernel Version
|
1605
1876
|
- regex: '(Linux)(?:[ /](\d+)\.(\d+)(?:\.(\d+)|)|)'
|
1606
1877
|
- regex: 'SunOS'
|
@@ -1624,19 +1895,19 @@ device_parsers:
|
|
1624
1895
|
# Mobile Spiders
|
1625
1896
|
# Catch the mobile crawler before checking for iPhones / Androids.
|
1626
1897
|
#########
|
1627
|
-
- regex: '(?:(?:iPhone|Windows CE|Windows Phone|Android)
|
1898
|
+
- 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
1899
|
regex_flag: 'i'
|
1629
1900
|
device_replacement: 'Spider'
|
1630
1901
|
brand_replacement: 'Spider'
|
1631
1902
|
model_replacement: 'Smartphone'
|
1632
|
-
- regex: '(?:DoCoMo|\bMOT\b|\bLG\b|Nokia|Samsung|SonyEricsson)
|
1903
|
+
- 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
1904
|
regex_flag: 'i'
|
1634
1905
|
device_replacement: 'Spider'
|
1635
1906
|
brand_replacement: 'Spider'
|
1636
1907
|
model_replacement: 'Feature Phone'
|
1637
1908
|
|
1638
1909
|
# PTST / WebPageTest.org crawlers
|
1639
|
-
- regex: ' PTST/\d+(
|
1910
|
+
- regex: ' PTST/\d+(?:\.\d+|)$'
|
1640
1911
|
device_replacement: 'Spider'
|
1641
1912
|
brand_replacement: 'Spider'
|
1642
1913
|
|
@@ -1646,11 +1917,11 @@ device_parsers:
|
|
1646
1917
|
brand_replacement: 'Spider'
|
1647
1918
|
|
1648
1919
|
# aspiegel.com spider (owned by Huawei)
|
1649
|
-
- regex: 'Mozilla
|
1920
|
+
- regex: 'Mozilla.{1,100}Mobile.{1,100}(AspiegelBot|PetalBot)'
|
1650
1921
|
device_replacement: 'Spider'
|
1651
1922
|
brand_replacement: 'Spider'
|
1652
1923
|
model_replacement: 'Smartphone'
|
1653
|
-
- regex: 'Mozilla
|
1924
|
+
- regex: 'Mozilla.{0,200}(AspiegelBot|PetalBot)'
|
1654
1925
|
device_replacement: 'Spider'
|
1655
1926
|
brand_replacement: 'Spider'
|
1656
1927
|
model_replacement: 'Desktop'
|
@@ -1659,7 +1930,7 @@ device_parsers:
|
|
1659
1930
|
# WebBrowser for SmartWatch
|
1660
1931
|
# @ref: https://play.google.com/store/apps/details?id=se.vaggan.webbrowser&hl=en
|
1661
1932
|
#########
|
1662
|
-
- regex: '\bSmartWatch {0,2}\( {0,2}([^;]
|
1933
|
+
- regex: '\bSmartWatch {0,2}\( {0,2}([^;]{1,200}) {0,2}; {0,2}([^;]{1,200}) {0,2};'
|
1663
1934
|
device_replacement: '$1 $2'
|
1664
1935
|
brand_replacement: '$1'
|
1665
1936
|
model_replacement: '$2'
|
@@ -1671,16 +1942,16 @@ device_parsers:
|
|
1671
1942
|
######################################################################
|
1672
1943
|
|
1673
1944
|
# Android Application
|
1674
|
-
- regex: 'Android Application[^\-]
|
1945
|
+
- regex: 'Android Application[^\-]{1,300} - (Sony) ?(Ericsson|) (.{1,200}) \w{1,20} - '
|
1675
1946
|
device_replacement: '$1 $2'
|
1676
1947
|
brand_replacement: '$1$2'
|
1677
1948
|
model_replacement: '$3'
|
1678
|
-
- regex: 'Android Application[^\-]
|
1949
|
+
- regex: 'Android Application[^\-]{1,300} - (?:HTC|HUAWEI|LGE|LENOVO|MEDION|TCT) (HTC|HUAWEI|LG|LENOVO|MEDION|ALCATEL)[ _\-](.{1,200}) \w{1,20} - '
|
1679
1950
|
regex_flag: 'i'
|
1680
1951
|
device_replacement: '$1 $2'
|
1681
1952
|
brand_replacement: '$1'
|
1682
1953
|
model_replacement: '$2'
|
1683
|
-
- regex: 'Android Application[^\-]
|
1954
|
+
- regex: 'Android Application[^\-]{1,300} - ([^ ]+) (.{1,200}) \w{1,20} - '
|
1684
1955
|
device_replacement: '$1 $2'
|
1685
1956
|
brand_replacement: '$1'
|
1686
1957
|
model_replacement: '$2'
|
@@ -1689,11 +1960,11 @@ device_parsers:
|
|
1689
1960
|
# 3Q
|
1690
1961
|
# @ref: http://www.3q-int.com/
|
1691
1962
|
#########
|
1692
|
-
- regex: ';
|
1963
|
+
- regex: '; {0,2}([BLRQ]C\d{4}[A-Z]{1,100}?)(?: Build|\) AppleWebKit)'
|
1693
1964
|
device_replacement: '3Q $1'
|
1694
1965
|
brand_replacement: '3Q'
|
1695
1966
|
model_replacement: '$1'
|
1696
|
-
- regex: ';
|
1967
|
+
- regex: '; {0,2}(?:3Q_)([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1697
1968
|
device_replacement: '3Q $1'
|
1698
1969
|
brand_replacement: '3Q'
|
1699
1970
|
model_replacement: '$1'
|
@@ -1702,19 +1973,19 @@ device_parsers:
|
|
1702
1973
|
# Acer
|
1703
1974
|
# @ref: http://us.acer.com/ac/en/US/content/group/tablets
|
1704
1975
|
#########
|
1705
|
-
- regex: 'Android [34]
|
1976
|
+
- 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
1977
|
device_replacement: '$1'
|
1707
1978
|
brand_replacement: 'Acer'
|
1708
1979
|
model_replacement: '$1'
|
1709
|
-
- regex: ';
|
1980
|
+
- regex: '; {0,2}Acer Iconia Tab ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1710
1981
|
device_replacement: '$1'
|
1711
1982
|
brand_replacement: 'Acer'
|
1712
1983
|
model_replacement: '$1'
|
1713
|
-
- regex: ';
|
1984
|
+
- regex: '; {0,2}(Z1[1235]0|E320[^/]{0,10}|S500|S510|Liquid[^;/]{0,30}|Iconia A\d+)(?: Build|\) AppleWebKit)'
|
1714
1985
|
device_replacement: '$1'
|
1715
1986
|
brand_replacement: 'Acer'
|
1716
1987
|
model_replacement: '$1'
|
1717
|
-
- regex: ';
|
1988
|
+
- regex: '; {0,2}(Acer |ACER )([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1718
1989
|
device_replacement: '$1$2'
|
1719
1990
|
brand_replacement: 'Acer'
|
1720
1991
|
model_replacement: '$2'
|
@@ -1725,7 +1996,7 @@ device_parsers:
|
|
1725
1996
|
# @note: VegaBean and VegaComb (names derived from jellybean, honeycomb) are
|
1726
1997
|
# custom ROM builds for Vega
|
1727
1998
|
#########
|
1728
|
-
- regex: ';
|
1999
|
+
- regex: '; {0,2}(Advent |)(Vega(?:Bean|Comb|)).{0,200}?(?: Build|\) AppleWebKit)'
|
1729
2000
|
device_replacement: '$1$2'
|
1730
2001
|
brand_replacement: 'Advent'
|
1731
2002
|
model_replacement: '$2'
|
@@ -1734,7 +2005,7 @@ device_parsers:
|
|
1734
2005
|
# Ainol
|
1735
2006
|
# @ref: http://www.ainol.com/plugin.php?identifier=ainol&module=product
|
1736
2007
|
#########
|
1737
|
-
- regex: ';
|
2008
|
+
- regex: '; {0,2}(Ainol |)((?:NOVO|[Nn]ovo)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1738
2009
|
device_replacement: '$1$2'
|
1739
2010
|
brand_replacement: 'Ainol'
|
1740
2011
|
model_replacement: '$2'
|
@@ -1743,12 +2014,12 @@ device_parsers:
|
|
1743
2014
|
# Airis
|
1744
2015
|
# @ref: http://airis.es/Tienda/Default.aspx?idG=001
|
1745
2016
|
#########
|
1746
|
-
- regex: ';
|
2017
|
+
- regex: '; {0,2}AIRIS[ _\-]?([^/;\)]+) {0,2}(?:;|\)|Build)'
|
1747
2018
|
regex_flag: 'i'
|
1748
2019
|
device_replacement: '$1'
|
1749
2020
|
brand_replacement: 'Airis'
|
1750
2021
|
model_replacement: '$1'
|
1751
|
-
- regex: ';
|
2022
|
+
- regex: '; {0,2}(OnePAD[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1752
2023
|
regex_flag: 'i'
|
1753
2024
|
device_replacement: '$1'
|
1754
2025
|
brand_replacement: 'Airis'
|
@@ -1758,7 +2029,7 @@ device_parsers:
|
|
1758
2029
|
# Airpad
|
1759
2030
|
# @ref: ??
|
1760
2031
|
#########
|
1761
|
-
- regex: ';
|
2032
|
+
- regex: '; {0,2}Airpad[ \-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1762
2033
|
device_replacement: 'Airpad $1'
|
1763
2034
|
brand_replacement: 'Airpad'
|
1764
2035
|
model_replacement: '$1'
|
@@ -1767,29 +2038,29 @@ device_parsers:
|
|
1767
2038
|
# Alcatel - TCT
|
1768
2039
|
# @ref: http://www.alcatelonetouch.com/global-en/products/smartphones.html
|
1769
2040
|
#########
|
1770
|
-
- regex: ';
|
2041
|
+
- regex: '; {0,2}(one ?touch) (EVO7|T10|T20)(?: Build|\) AppleWebKit)'
|
1771
2042
|
device_replacement: 'Alcatel One Touch $2'
|
1772
2043
|
brand_replacement: 'Alcatel'
|
1773
2044
|
model_replacement: 'One Touch $2'
|
1774
|
-
- regex: ';
|
2045
|
+
- regex: '; {0,2}(?:alcatel[ _]|)(?:(?:one[ _]?touch[ _])|ot[ \-])([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1775
2046
|
regex_flag: 'i'
|
1776
2047
|
device_replacement: 'Alcatel One Touch $1'
|
1777
2048
|
brand_replacement: 'Alcatel'
|
1778
2049
|
model_replacement: 'One Touch $1'
|
1779
|
-
- regex: ';
|
2050
|
+
- regex: '; {0,2}(TCL)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1780
2051
|
device_replacement: '$1 $2'
|
1781
2052
|
brand_replacement: '$1'
|
1782
2053
|
model_replacement: '$2'
|
1783
2054
|
# operator specific models
|
1784
|
-
- regex: ';
|
2055
|
+
- regex: '; {0,2}(Vodafone Smart II|Optimus_Madrid)(?: Build|\) AppleWebKit)'
|
1785
2056
|
device_replacement: 'Alcatel $1'
|
1786
2057
|
brand_replacement: 'Alcatel'
|
1787
2058
|
model_replacement: '$1'
|
1788
|
-
- regex: ';
|
2059
|
+
- regex: '; {0,2}BASE_Lutea_3(?: Build|\) AppleWebKit)'
|
1789
2060
|
device_replacement: 'Alcatel One Touch 998'
|
1790
2061
|
brand_replacement: 'Alcatel'
|
1791
2062
|
model_replacement: 'One Touch 998'
|
1792
|
-
- regex: ';
|
2063
|
+
- regex: '; {0,2}BASE_Varia(?: Build|\) AppleWebKit)'
|
1793
2064
|
device_replacement: 'Alcatel One Touch 918D'
|
1794
2065
|
brand_replacement: 'Alcatel'
|
1795
2066
|
model_replacement: 'One Touch 918D'
|
@@ -1798,7 +2069,7 @@ device_parsers:
|
|
1798
2069
|
# Allfine
|
1799
2070
|
# @ref: http://www.myallfine.com/Products.asp
|
1800
2071
|
#########
|
1801
|
-
- regex: ';
|
2072
|
+
- regex: '; {0,2}((?:FINE|Fine)\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1802
2073
|
device_replacement: '$1'
|
1803
2074
|
brand_replacement: 'Allfine'
|
1804
2075
|
model_replacement: '$1'
|
@@ -1807,15 +2078,15 @@ device_parsers:
|
|
1807
2078
|
# Allview
|
1808
2079
|
# @ref: http://www.allview.ro/produse/droseries/lista-tablete-pc/
|
1809
2080
|
#########
|
1810
|
-
- regex: ';
|
2081
|
+
- regex: '; {0,2}(ALLVIEW[ _]?|Allview[ _]?)((?:Speed|SPEED).{0,200}?)(?: Build|\) AppleWebKit)'
|
1811
2082
|
device_replacement: '$1$2'
|
1812
2083
|
brand_replacement: 'Allview'
|
1813
2084
|
model_replacement: '$2'
|
1814
|
-
- regex: ';
|
2085
|
+
- regex: '; {0,2}(ALLVIEW[ _]?|Allview[ _]?|)(AX1_Shine|AX2_Frenzy)(?: Build|\) AppleWebKit)'
|
1815
2086
|
device_replacement: '$1$2'
|
1816
2087
|
brand_replacement: 'Allview'
|
1817
2088
|
model_replacement: '$2'
|
1818
|
-
- regex: ';
|
2089
|
+
- regex: '; {0,2}(ALLVIEW[ _]?|Allview[ _]?)([^;/]*?)(?: Build|\) AppleWebKit)'
|
1819
2090
|
device_replacement: '$1$2'
|
1820
2091
|
brand_replacement: 'Allview'
|
1821
2092
|
model_replacement: '$2'
|
@@ -1825,11 +2096,11 @@ device_parsers:
|
|
1825
2096
|
# @ref: http://www.allwinner.com/
|
1826
2097
|
# @models: A31 (13.3"),A20,A10,
|
1827
2098
|
#########
|
1828
|
-
- regex: ';
|
2099
|
+
- regex: '; {0,2}(A13-MID)(?: Build|\) AppleWebKit)'
|
1829
2100
|
device_replacement: '$1'
|
1830
2101
|
brand_replacement: 'Allwinner'
|
1831
2102
|
model_replacement: '$1'
|
1832
|
-
- regex: ';
|
2103
|
+
- regex: '; {0,2}(Allwinner)[ _\-]?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1833
2104
|
device_replacement: '$1 $2'
|
1834
2105
|
brand_replacement: 'Allwinner'
|
1835
2106
|
model_replacement: '$1'
|
@@ -1838,7 +2109,7 @@ device_parsers:
|
|
1838
2109
|
# Amaway
|
1839
2110
|
# @ref: http://www.amaway.cn/
|
1840
2111
|
#########
|
1841
|
-
- regex: ';
|
2112
|
+
- 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
2113
|
device_replacement: '$1'
|
1843
2114
|
brand_replacement: 'Amaway'
|
1844
2115
|
model_replacement: '$1'
|
@@ -1847,11 +2118,11 @@ device_parsers:
|
|
1847
2118
|
# Amoi
|
1848
2119
|
# @ref: http://www.amoi.com/en/prd/prd_index.jspx
|
1849
2120
|
#########
|
1850
|
-
- regex: ';
|
2121
|
+
- regex: '; {0,2}(?:AMOI|Amoi)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1851
2122
|
device_replacement: 'Amoi $1'
|
1852
2123
|
brand_replacement: 'Amoi'
|
1853
2124
|
model_replacement: '$1'
|
1854
|
-
- regex: '^(?:AMOI|Amoi)[ _]([^;/]
|
2125
|
+
- regex: '^(?:AMOI|Amoi)[ _]([^;/]{1,100}?) Linux'
|
1855
2126
|
device_replacement: 'Amoi $1'
|
1856
2127
|
brand_replacement: 'Amoi'
|
1857
2128
|
model_replacement: '$1'
|
@@ -1860,7 +2131,7 @@ device_parsers:
|
|
1860
2131
|
# Aoc
|
1861
2132
|
# @ref: http://latin.aoc.com/media_tablet
|
1862
2133
|
#########
|
1863
|
-
- regex: ';
|
2134
|
+
- regex: '; {0,2}(MW(?:0[789]|10)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1864
2135
|
device_replacement: '$1'
|
1865
2136
|
brand_replacement: 'Aoc'
|
1866
2137
|
model_replacement: '$1'
|
@@ -1871,11 +2142,11 @@ device_parsers:
|
|
1871
2142
|
# @ref: http://www.luckystar.com.cn/en/mobiletel.aspx?page=1
|
1872
2143
|
# @note: brand owned by luckystar
|
1873
2144
|
#########
|
1874
|
-
- regex: ';
|
2145
|
+
- 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
2146
|
device_replacement: 'Aoson $1'
|
1876
2147
|
brand_replacement: 'Aoson'
|
1877
2148
|
model_replacement: '$1'
|
1878
|
-
- regex: ';
|
2149
|
+
- regex: '; {0,2}Aoson ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1879
2150
|
regex_flag: 'i'
|
1880
2151
|
device_replacement: 'Aoson $1'
|
1881
2152
|
brand_replacement: 'Aoson'
|
@@ -1885,7 +2156,7 @@ device_parsers:
|
|
1885
2156
|
# Apanda
|
1886
2157
|
# @ref: http://www.apanda.com.cn/
|
1887
2158
|
#########
|
1888
|
-
- regex: ';
|
2159
|
+
- regex: '; {0,2}[Aa]panda[ _\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1889
2160
|
device_replacement: 'Apanda $1'
|
1890
2161
|
brand_replacement: 'Apanda'
|
1891
2162
|
model_replacement: '$1'
|
@@ -1895,23 +2166,23 @@ device_parsers:
|
|
1895
2166
|
# @ref: http://www.archos.com/de/products/tablets.html
|
1896
2167
|
# @ref: http://www.archos.com/de/products/smartphones/index.html
|
1897
2168
|
#########
|
1898
|
-
- regex: ';
|
2169
|
+
- regex: '; {0,2}(?:ARCHOS|Archos) ?(GAMEPAD.{0,200}?)(?: Build|\) AppleWebKit)'
|
1899
2170
|
device_replacement: 'Archos $1'
|
1900
2171
|
brand_replacement: 'Archos'
|
1901
2172
|
model_replacement: '$1'
|
1902
|
-
- regex: 'ARCHOS; GOGI; ([^;]
|
2173
|
+
- regex: 'ARCHOS; GOGI; ([^;]{1,200});'
|
1903
2174
|
device_replacement: 'Archos $1'
|
1904
2175
|
brand_replacement: 'Archos'
|
1905
2176
|
model_replacement: '$1'
|
1906
|
-
- regex: '(?:ARCHOS|Archos)[ _]?(
|
2177
|
+
- regex: '(?:ARCHOS|Archos)[ _]?(.{0,200}?)(?: Build|[;/\(\)\-]|$)'
|
1907
2178
|
device_replacement: 'Archos $1'
|
1908
2179
|
brand_replacement: 'Archos'
|
1909
2180
|
model_replacement: '$1'
|
1910
|
-
- regex: ';
|
2181
|
+
- regex: '; {0,2}(AN(?:7|8|9|10|13)[A-Z0-9]{1,4})(?: Build|\) AppleWebKit)'
|
1911
2182
|
device_replacement: 'Archos $1'
|
1912
2183
|
brand_replacement: 'Archos'
|
1913
2184
|
model_replacement: '$1'
|
1914
|
-
- regex: ';
|
2185
|
+
- regex: '; {0,2}(A28|A32|A43|A70(?:BHT|CHT|HB|S|X)|A101(?:B|C|IT)|A7EB|A7EB-WK|101G9|80G9)(?: Build|\) AppleWebKit)'
|
1915
2186
|
device_replacement: 'Archos $1'
|
1916
2187
|
brand_replacement: 'Archos'
|
1917
2188
|
model_replacement: '$1'
|
@@ -1920,11 +2191,11 @@ device_parsers:
|
|
1920
2191
|
# A-rival
|
1921
2192
|
# @ref: http://www.a-rival.de/de/
|
1922
2193
|
#########
|
1923
|
-
- regex: ';
|
2194
|
+
- regex: '; {0,2}(PAD-FMD[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1924
2195
|
device_replacement: '$1'
|
1925
2196
|
brand_replacement: 'Arival'
|
1926
2197
|
model_replacement: '$1'
|
1927
|
-
- regex: ';
|
2198
|
+
- regex: '; {0,2}(BioniQ) ?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1928
2199
|
device_replacement: '$1 $2'
|
1929
2200
|
brand_replacement: 'Arival'
|
1930
2201
|
model_replacement: '$1 $2'
|
@@ -1933,11 +2204,11 @@ device_parsers:
|
|
1933
2204
|
# Arnova
|
1934
2205
|
# @ref: http://arnovatech.com/
|
1935
2206
|
#########
|
1936
|
-
- regex: ';
|
2207
|
+
- regex: '; {0,2}(AN\d[^;/]{1,100}|ARCHM\d+)(?: Build|\) AppleWebKit)'
|
1937
2208
|
device_replacement: 'Arnova $1'
|
1938
2209
|
brand_replacement: 'Arnova'
|
1939
2210
|
model_replacement: '$1'
|
1940
|
-
- regex: ';
|
2211
|
+
- regex: '; {0,2}(?:ARNOVA|Arnova) ?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1941
2212
|
device_replacement: 'Arnova $1'
|
1942
2213
|
brand_replacement: 'Arnova'
|
1943
2214
|
model_replacement: '$1'
|
@@ -1946,7 +2217,7 @@ device_parsers:
|
|
1946
2217
|
# Assistant
|
1947
2218
|
# @ref: http://www.assistant.ua
|
1948
2219
|
#########
|
1949
|
-
- regex: ';
|
2220
|
+
- regex: '; {0,2}(?:ASSISTANT |)(AP)-?([1789]\d{2}[A-Z]{0,2}|80104)(?: Build|\) AppleWebKit)'
|
1950
2221
|
device_replacement: 'Assistant $1-$2'
|
1951
2222
|
brand_replacement: 'Assistant'
|
1952
2223
|
model_replacement: '$1-$2'
|
@@ -1955,11 +2226,11 @@ device_parsers:
|
|
1955
2226
|
# Asus
|
1956
2227
|
# @ref: http://www.asus.com/uk/Tablets_Mobile/
|
1957
2228
|
#########
|
1958
|
-
- regex: ';
|
2229
|
+
- 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
2230
|
device_replacement: 'Asus $1'
|
1960
2231
|
brand_replacement: 'Asus'
|
1961
2232
|
model_replacement: '$1'
|
1962
|
-
- regex: ';
|
2233
|
+
- regex: '; {0,2}ASUS[ _]{0,10}([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1963
2234
|
device_replacement: 'Asus $1'
|
1964
2235
|
brand_replacement: 'Asus'
|
1965
2236
|
model_replacement: '$1'
|
@@ -1967,11 +2238,11 @@ device_parsers:
|
|
1967
2238
|
#########
|
1968
2239
|
# Garmin-Asus
|
1969
2240
|
#########
|
1970
|
-
- regex: ';
|
2241
|
+
- regex: '; {0,2}Garmin-Asus ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1971
2242
|
device_replacement: 'Garmin-Asus $1'
|
1972
2243
|
brand_replacement: 'Garmin-Asus'
|
1973
2244
|
model_replacement: '$1'
|
1974
|
-
- regex: ';
|
2245
|
+
- regex: '; {0,2}(Garminfone)(?: Build|\) AppleWebKit)'
|
1975
2246
|
device_replacement: 'Garmin $1'
|
1976
2247
|
brand_replacement: 'Garmin-Asus'
|
1977
2248
|
model_replacement: '$1'
|
@@ -1980,7 +2251,7 @@ device_parsers:
|
|
1980
2251
|
# Attab
|
1981
2252
|
# @ref: http://www.theattab.com/
|
1982
2253
|
#########
|
1983
|
-
- regex: '; (@TAB-[^;/]
|
2254
|
+
- regex: '; (@TAB-[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1984
2255
|
device_replacement: '$1'
|
1985
2256
|
brand_replacement: 'Attab'
|
1986
2257
|
model_replacement: '$1'
|
@@ -1990,7 +2261,7 @@ device_parsers:
|
|
1990
2261
|
# @ref: ??
|
1991
2262
|
# @note: Take care with Docomo T-01 Toshiba
|
1992
2263
|
#########
|
1993
|
-
- regex: ';
|
2264
|
+
- regex: '; {0,2}(T-(?:07|[^0]\d)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
1994
2265
|
device_replacement: '$1'
|
1995
2266
|
brand_replacement: 'Audiosonic'
|
1996
2267
|
model_replacement: '$1'
|
@@ -1999,7 +2270,7 @@ device_parsers:
|
|
1999
2270
|
# Axioo
|
2000
2271
|
# @ref: http://www.axiooworld.com/ww/index.php
|
2001
2272
|
#########
|
2002
|
-
- regex: ';
|
2273
|
+
- regex: '; {0,2}(?:Axioo[ _\-]([^;/]{1,100}?)|(picopad)[ _\-]([^;/]{1,100}?))(?: Build|\) AppleWebKit)'
|
2003
2274
|
regex_flag: 'i'
|
2004
2275
|
device_replacement: 'Axioo $1$2 $3'
|
2005
2276
|
brand_replacement: 'Axioo'
|
@@ -2009,7 +2280,7 @@ device_parsers:
|
|
2009
2280
|
# Azend
|
2010
2281
|
# @ref: http://azendcorp.com/index.php/products/portable-electronics
|
2011
2282
|
#########
|
2012
|
-
- regex: ';
|
2283
|
+
- regex: '; {0,2}(V(?:100|700|800)[^;/]*)(?: Build|\) AppleWebKit)'
|
2013
2284
|
device_replacement: '$1'
|
2014
2285
|
brand_replacement: 'Azend'
|
2015
2286
|
model_replacement: '$1'
|
@@ -2018,7 +2289,7 @@ device_parsers:
|
|
2018
2289
|
# Bak
|
2019
2290
|
# @ref: http://www.bakinternational.com/produtos.php?cat=80
|
2020
2291
|
#########
|
2021
|
-
- regex: ';
|
2292
|
+
- regex: '; {0,2}(IBAK\-[^;/]*)(?: Build|\) AppleWebKit)'
|
2022
2293
|
regex_flag: 'i'
|
2023
2294
|
device_replacement: '$1'
|
2024
2295
|
brand_replacement: 'Bak'
|
@@ -2029,7 +2300,7 @@ device_parsers:
|
|
2029
2300
|
# @ref: http://www.bedove.com/product.html
|
2030
2301
|
# @models: HY6501|HY5001|X12|X21|I5
|
2031
2302
|
#########
|
2032
|
-
- regex: ';
|
2303
|
+
- regex: '; {0,2}(HY5001|HY6501|X12|X21|I5)(?: Build|\) AppleWebKit)'
|
2033
2304
|
device_replacement: 'Bedove $1'
|
2034
2305
|
brand_replacement: 'Bedove'
|
2035
2306
|
model_replacement: '$1'
|
@@ -2038,7 +2309,7 @@ device_parsers:
|
|
2038
2309
|
# Benss
|
2039
2310
|
# @ref: http://www.benss.net/
|
2040
2311
|
#########
|
2041
|
-
- regex: ';
|
2312
|
+
- regex: '; {0,2}(JC-[^;/]*)(?: Build|\) AppleWebKit)'
|
2042
2313
|
device_replacement: 'Benss $1'
|
2043
2314
|
brand_replacement: 'Benss'
|
2044
2315
|
model_replacement: '$1'
|
@@ -2048,7 +2319,7 @@ device_parsers:
|
|
2048
2319
|
# @ref: http://uk.blackberry.com/
|
2049
2320
|
# @note: Android Apps seams to be used here
|
2050
2321
|
#########
|
2051
|
-
- regex: ';
|
2322
|
+
- regex: '; {0,2}(BB) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2052
2323
|
device_replacement: '$1 $2'
|
2053
2324
|
brand_replacement: 'Blackberry'
|
2054
2325
|
model_replacement: '$2'
|
@@ -2057,11 +2328,11 @@ device_parsers:
|
|
2057
2328
|
# Blackbird
|
2058
2329
|
# @ref: http://iblackbird.co.kr
|
2059
2330
|
#########
|
2060
|
-
- regex: ';
|
2331
|
+
- regex: '; {0,2}(BlackBird)[ _](I8.{0,200}?)(?: Build|\) AppleWebKit)'
|
2061
2332
|
device_replacement: '$1 $2'
|
2062
2333
|
brand_replacement: '$1'
|
2063
2334
|
model_replacement: '$2'
|
2064
|
-
- regex: ';
|
2335
|
+
- regex: '; {0,2}(BlackBird)[ _](.{0,200}?)(?: Build|\) AppleWebKit)'
|
2065
2336
|
device_replacement: '$1 $2'
|
2066
2337
|
brand_replacement: '$1'
|
2067
2338
|
model_replacement: '$2'
|
@@ -2071,7 +2342,7 @@ device_parsers:
|
|
2071
2342
|
# @ref: http://www.blaupunkt.com
|
2072
2343
|
#########
|
2073
2344
|
# Endeavour
|
2074
|
-
- regex: ';
|
2345
|
+
- regex: '; {0,2}([0-9]+BP[EM][^;/]*|Endeavour[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2075
2346
|
device_replacement: 'Blaupunkt $1'
|
2076
2347
|
brand_replacement: 'Blaupunkt'
|
2077
2348
|
model_replacement: '$1'
|
@@ -2080,12 +2351,12 @@ device_parsers:
|
|
2080
2351
|
# Blu
|
2081
2352
|
# @ref: http://bluproducts.com
|
2082
2353
|
#########
|
2083
|
-
- regex: ';
|
2354
|
+
- regex: '; {0,2}((?:BLU|Blu)[ _\-])([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2084
2355
|
device_replacement: '$1$2'
|
2085
2356
|
brand_replacement: 'Blu'
|
2086
2357
|
model_replacement: '$2'
|
2087
2358
|
# BMOBILE = operator branded device
|
2088
|
-
- regex: ';
|
2359
|
+
- regex: '; {0,2}(?:BMOBILE )?(Blu|BLU|DASH [^;/]{1,100}|VIVO 4\.3|TANK 4\.5)(?: Build|\) AppleWebKit)'
|
2089
2360
|
device_replacement: '$1'
|
2090
2361
|
brand_replacement: 'Blu'
|
2091
2362
|
model_replacement: '$1'
|
@@ -2095,7 +2366,7 @@ device_parsers:
|
|
2095
2366
|
# @ref: http://www.blusens.com/es/?sg=1&sv=al&roc=1
|
2096
2367
|
#########
|
2097
2368
|
# tablet
|
2098
|
-
- regex: ';
|
2369
|
+
- regex: '; {0,2}(TOUCH\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2099
2370
|
device_replacement: '$1'
|
2100
2371
|
brand_replacement: 'Blusens'
|
2101
2372
|
model_replacement: '$1'
|
@@ -2106,7 +2377,7 @@ device_parsers:
|
|
2106
2377
|
# @note: Might collide with Maxx as AX is used also there.
|
2107
2378
|
#########
|
2108
2379
|
# smartphone
|
2109
|
-
- regex: ';
|
2380
|
+
- regex: '; {0,2}(AX5\d+)(?: Build|\) AppleWebKit)'
|
2110
2381
|
device_replacement: '$1'
|
2111
2382
|
brand_replacement: 'Bmobile'
|
2112
2383
|
model_replacement: '$1'
|
@@ -2115,11 +2386,11 @@ device_parsers:
|
|
2115
2386
|
# bq
|
2116
2387
|
# @ref: http://bqreaders.com
|
2117
2388
|
#########
|
2118
|
-
- regex: ';
|
2389
|
+
- regex: '; {0,2}([Bb]q) ([^;/]{1,100}?);?(?: Build|\) AppleWebKit)'
|
2119
2390
|
device_replacement: '$1 $2'
|
2120
2391
|
brand_replacement: 'bq'
|
2121
2392
|
model_replacement: '$2'
|
2122
|
-
- regex: ';
|
2393
|
+
- regex: '; {0,2}(Maxwell [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2123
2394
|
device_replacement: '$1'
|
2124
2395
|
brand_replacement: 'bq'
|
2125
2396
|
model_replacement: '$1'
|
@@ -2128,7 +2399,7 @@ device_parsers:
|
|
2128
2399
|
# Braun Phototechnik
|
2129
2400
|
# @ref: http://www.braun-phototechnik.de/en/products/list/~pcat.250/Tablet-PC.html
|
2130
2401
|
#########
|
2131
|
-
- regex: ';
|
2402
|
+
- regex: '; {0,2}((?:B-Tab|B-TAB) ?\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2132
2403
|
device_replacement: '$1'
|
2133
2404
|
brand_replacement: 'Braun'
|
2134
2405
|
model_replacement: '$1'
|
@@ -2137,7 +2408,7 @@ device_parsers:
|
|
2137
2408
|
# Broncho
|
2138
2409
|
# @ref: http://www.broncho.cn/
|
2139
2410
|
#########
|
2140
|
-
- regex: ';
|
2411
|
+
- regex: '; {0,2}(Broncho) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2141
2412
|
device_replacement: '$1 $2'
|
2142
2413
|
brand_replacement: '$1'
|
2143
2414
|
model_replacement: '$2'
|
@@ -2146,7 +2417,7 @@ device_parsers:
|
|
2146
2417
|
# Captiva
|
2147
2418
|
# @ref: http://www.captiva-power.de
|
2148
2419
|
#########
|
2149
|
-
- regex: ';
|
2420
|
+
- regex: '; {0,2}CAPTIVA ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2150
2421
|
device_replacement: 'Captiva $1'
|
2151
2422
|
brand_replacement: 'Captiva'
|
2152
2423
|
model_replacement: '$1'
|
@@ -2155,7 +2426,7 @@ device_parsers:
|
|
2155
2426
|
# Casio
|
2156
2427
|
# @ref: http://www.casiogzone.com/
|
2157
2428
|
#########
|
2158
|
-
- regex: ';
|
2429
|
+
- regex: '; {0,2}(C771|CAL21|IS11CA)(?: Build|\) AppleWebKit)'
|
2159
2430
|
device_replacement: '$1'
|
2160
2431
|
brand_replacement: 'Casio'
|
2161
2432
|
model_replacement: '$1'
|
@@ -2164,15 +2435,15 @@ device_parsers:
|
|
2164
2435
|
# Cat
|
2165
2436
|
# @ref: http://www.cat-sound.com
|
2166
2437
|
#########
|
2167
|
-
- regex: ';
|
2438
|
+
- regex: '; {0,2}(?:Cat|CAT) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2168
2439
|
device_replacement: 'Cat $1'
|
2169
2440
|
brand_replacement: 'Cat'
|
2170
2441
|
model_replacement: '$1'
|
2171
|
-
- regex: ';
|
2442
|
+
- regex: '; {0,2}(?:Cat)(Nova.{0,200}?)(?: Build|\) AppleWebKit)'
|
2172
2443
|
device_replacement: 'Cat $1'
|
2173
2444
|
brand_replacement: 'Cat'
|
2174
2445
|
model_replacement: '$1'
|
2175
|
-
- regex: ';
|
2446
|
+
- regex: '; {0,2}(INM8002KP|ADM8000KP_[AB])(?: Build|\) AppleWebKit)'
|
2176
2447
|
device_replacement: '$1'
|
2177
2448
|
brand_replacement: 'Cat'
|
2178
2449
|
model_replacement: 'Tablet PHOENIX 8.1J0'
|
@@ -2182,7 +2453,7 @@ device_parsers:
|
|
2182
2453
|
# @ref: http://www.celkonmobiles.com/?_a=products
|
2183
2454
|
# @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
2455
|
#########
|
2185
|
-
- regex: ';
|
2456
|
+
- regex: '; {0,2}(?:[Cc]elkon[ _\*]|CELKON[ _\*])([^;/\)]+) ?(?:Build|;|\))'
|
2186
2457
|
device_replacement: '$1'
|
2187
2458
|
brand_replacement: 'Celkon'
|
2188
2459
|
model_replacement: '$1'
|
@@ -2190,12 +2461,12 @@ device_parsers:
|
|
2190
2461
|
device_replacement: '$1'
|
2191
2462
|
brand_replacement: 'Celkon'
|
2192
2463
|
model_replacement: '$1'
|
2193
|
-
- regex: ';
|
2464
|
+
- regex: '; {0,2}(CT)-?(\d+)(?: Build|\) AppleWebKit)'
|
2194
2465
|
device_replacement: '$1$2'
|
2195
2466
|
brand_replacement: 'Celkon'
|
2196
2467
|
model_replacement: '$1$2'
|
2197
2468
|
# smartphones
|
2198
|
-
- regex: ';
|
2469
|
+
- regex: '; {0,2}(A19|A19Q|A105|A107[^;/\)]*) ?(?:Build|;|\))'
|
2199
2470
|
device_replacement: '$1'
|
2200
2471
|
brand_replacement: 'Celkon'
|
2201
2472
|
model_replacement: '$1'
|
@@ -2206,24 +2477,57 @@ device_parsers:
|
|
2206
2477
|
# @brief: China manufacturer makes tablets for different small brands
|
2207
2478
|
# (eg. http://www.zeepad.net/index.html)
|
2208
2479
|
#########
|
2209
|
-
- regex: ';
|
2480
|
+
- regex: '; {0,2}(TPC[0-9]{4,5})(?: Build|\) AppleWebKit)'
|
2210
2481
|
device_replacement: '$1'
|
2211
2482
|
brand_replacement: 'ChangJia'
|
2212
2483
|
model_replacement: '$1'
|
2213
2484
|
|
2485
|
+
##########
|
2486
|
+
# Chromecast
|
2487
|
+
# @ref: https://en.wikipedia.org/wiki/Chromecast#Hardware_and_design
|
2488
|
+
##########
|
2489
|
+
# Ex: Mozilla/5.0 (Linux; Android 12.0; Build/STTL.240206.002) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.0 Safari/537.36 CrKey/1.56.500000 DeviceType/AndroidTV
|
2490
|
+
# Ex: Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.225 Safari/537.36 CrKey/1.56.500000 DeviceType/SmartSpeaker
|
2491
|
+
# Ex: Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.225 Safari/537.36 CrKey/1.56.500000 DeviceType/Chromecast
|
2492
|
+
# These are the newer Chromecast devices, such as smart speakers, Google TVs, etc. that have an explicit device type.
|
2493
|
+
- regex: 'CrKey.*DeviceType/([^/]*)'
|
2494
|
+
brand_replacement: 'Google'
|
2495
|
+
device_replacement: 'Chromecast'
|
2496
|
+
model_replacement: '$1'
|
2497
|
+
|
2498
|
+
# Ex: Mozilla/5.0 (Fuchsia) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 CrKey/1.56.500000
|
2499
|
+
# These are some intermediate "Nest Hub" Chromecast devices running Fuchsia.
|
2500
|
+
- regex: 'Fuchsia.*CrKey'
|
2501
|
+
brand_replacement: 'Google'
|
2502
|
+
device_replacement: 'Chromecast'
|
2503
|
+
model_replacement: 'Nest Hub'
|
2504
|
+
|
2505
|
+
# Ex: Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.47 Safari/537.36 CrKey/1.36.159268
|
2506
|
+
# These are the first generation of Chromecast devices that ran Linux. They don't specify a device type.
|
2507
|
+
- regex: 'Linux.*CrKey/1.36'
|
2508
|
+
brand_replacement: 'Google'
|
2509
|
+
device_replacement: 'Chromecast'
|
2510
|
+
model_replacement: 'First Generation'
|
2511
|
+
|
2512
|
+
# We have no data on the user agent strings of other models, except that they all report CrKey/
|
2513
|
+
- regex: 'CrKey/'
|
2514
|
+
brand_replacement: 'Google'
|
2515
|
+
device_replacement: 'Chromecast'
|
2516
|
+
model_replacement: 'Chromecast'
|
2517
|
+
|
2214
2518
|
#########
|
2215
2519
|
# Cloudfone
|
2216
2520
|
# @ref: http://www.cloudfonemobile.com/
|
2217
2521
|
#########
|
2218
|
-
- regex: ';
|
2522
|
+
- regex: '; {0,2}(Cloudfone)[ _](Excite)([^ ][^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2219
2523
|
device_replacement: '$1 $2 $3'
|
2220
2524
|
brand_replacement: 'Cloudfone'
|
2221
2525
|
model_replacement: '$1 $2 $3'
|
2222
|
-
- regex: ';
|
2526
|
+
- regex: '; {0,2}(Excite|ICE)[ _](\d+[^;/]{0,100}?)(?: Build|\) AppleWebKit)'
|
2223
2527
|
device_replacement: 'Cloudfone $1 $2'
|
2224
2528
|
brand_replacement: 'Cloudfone'
|
2225
2529
|
model_replacement: 'Cloudfone $1 $2'
|
2226
|
-
- regex: ';
|
2530
|
+
- regex: '; {0,2}(Cloudfone|CloudPad)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2227
2531
|
device_replacement: '$1 $2'
|
2228
2532
|
brand_replacement: 'Cloudfone'
|
2229
2533
|
model_replacement: '$1 $2'
|
@@ -2232,7 +2536,7 @@ device_parsers:
|
|
2232
2536
|
# Cmx
|
2233
2537
|
# @ref: http://cmx.at/de/
|
2234
2538
|
#########
|
2235
|
-
- regex: ';
|
2539
|
+
- regex: '; {0,2}((?:Aquila|Clanga|Rapax)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2236
2540
|
regex_flag: 'i'
|
2237
2541
|
device_replacement: '$1'
|
2238
2542
|
brand_replacement: 'Cmx'
|
@@ -2243,7 +2547,7 @@ device_parsers:
|
|
2243
2547
|
# @ref: http://cobykyros.com
|
2244
2548
|
# @note: Be careful with MID\d{3} from MpMan or Manta
|
2245
2549
|
#########
|
2246
|
-
- regex: ';
|
2550
|
+
- regex: '; {0,2}(?:CFW-|Kyros )?(MID[0-9]{4}(?:[ABC]|SR|TV)?)(\(3G\)-4G| GB 8K| 3G| 8K| GB)? {0,2}(?:Build|[;\)])'
|
2247
2551
|
device_replacement: 'CobyKyros $1$2'
|
2248
2552
|
brand_replacement: 'CobyKyros'
|
2249
2553
|
model_replacement: '$1$2'
|
@@ -2252,7 +2556,7 @@ device_parsers:
|
|
2252
2556
|
# Coolpad
|
2253
2557
|
# @ref: ??
|
2254
2558
|
#########
|
2255
|
-
- regex: ';
|
2559
|
+
- regex: '; {0,2}([^;/]{0,50})Coolpad[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2256
2560
|
device_replacement: '$1$2'
|
2257
2561
|
brand_replacement: 'Coolpad'
|
2258
2562
|
model_replacement: '$1$2'
|
@@ -2261,7 +2565,7 @@ device_parsers:
|
|
2261
2565
|
# Cube
|
2262
2566
|
# @ref: http://www.cube-tablet.com/buy-products.html
|
2263
2567
|
#########
|
2264
|
-
- regex: ';
|
2568
|
+
- regex: '; {0,2}(CUBE[ _])?([KU][0-9]+ ?GT.{0,200}?|A5300)(?: Build|\) AppleWebKit)'
|
2265
2569
|
regex_flag: 'i'
|
2266
2570
|
device_replacement: '$1$2'
|
2267
2571
|
brand_replacement: 'Cube'
|
@@ -2271,12 +2575,12 @@ device_parsers:
|
|
2271
2575
|
# Cubot
|
2272
2576
|
# @ref: http://www.cubotmall.com/
|
2273
2577
|
#########
|
2274
|
-
- regex: ';
|
2578
|
+
- regex: '; {0,2}CUBOT ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2275
2579
|
regex_flag: 'i'
|
2276
2580
|
device_replacement: '$1'
|
2277
2581
|
brand_replacement: 'Cubot'
|
2278
2582
|
model_replacement: '$1'
|
2279
|
-
- regex: ';
|
2583
|
+
- regex: '; {0,2}(BOBBY)(?: Build|\) AppleWebKit)'
|
2280
2584
|
regex_flag: 'i'
|
2281
2585
|
device_replacement: '$1'
|
2282
2586
|
brand_replacement: 'Cubot'
|
@@ -2286,7 +2590,7 @@ device_parsers:
|
|
2286
2590
|
# Danew
|
2287
2591
|
# @ref: http://www.danew.com/produits-tablette.php
|
2288
2592
|
#########
|
2289
|
-
- regex: ';
|
2593
|
+
- regex: '; {0,2}(Dslide [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2290
2594
|
device_replacement: '$1'
|
2291
2595
|
brand_replacement: 'Danew'
|
2292
2596
|
model_replacement: '$1'
|
@@ -2300,39 +2604,35 @@ device_parsers:
|
|
2300
2604
|
# @ref: http://www.dell.com/in/p/mobile-xcd28/pd
|
2301
2605
|
# @ref: http://www.dell.com/in/p/mobile-xcd35/pd
|
2302
2606
|
#########
|
2303
|
-
- regex: ';
|
2607
|
+
- regex: '; {0,2}(XCD)[ _]?(28|35)(?: Build|\) AppleWebKit)'
|
2304
2608
|
device_replacement: 'Dell $1$2'
|
2305
2609
|
brand_replacement: 'Dell'
|
2306
2610
|
model_replacement: '$1$2'
|
2307
|
-
- regex: ';
|
2611
|
+
- regex: '; {0,2}(001DL)(?: Build|\) AppleWebKit)'
|
2308
2612
|
device_replacement: 'Dell $1'
|
2309
2613
|
brand_replacement: 'Dell'
|
2310
2614
|
model_replacement: 'Streak'
|
2311
|
-
- regex: ';
|
2615
|
+
- regex: '; {0,2}(?:Dell|DELL) (Streak)(?: Build|\) AppleWebKit)'
|
2312
2616
|
device_replacement: 'Dell $1'
|
2313
2617
|
brand_replacement: 'Dell'
|
2314
2618
|
model_replacement: 'Streak'
|
2315
|
-
- regex: ';
|
2619
|
+
- regex: '; {0,2}(101DL|GS01|Streak Pro[^;/]{0,100})(?: Build|\) AppleWebKit)'
|
2316
2620
|
device_replacement: 'Dell $1'
|
2317
2621
|
brand_replacement: 'Dell'
|
2318
2622
|
model_replacement: 'Streak Pro'
|
2319
|
-
- regex: ';
|
2623
|
+
- regex: '; {0,2}([Ss]treak ?7)(?: Build|\) AppleWebKit)'
|
2320
2624
|
device_replacement: 'Dell $1'
|
2321
2625
|
brand_replacement: 'Dell'
|
2322
2626
|
model_replacement: 'Streak 7'
|
2323
|
-
- regex: ';
|
2627
|
+
- regex: '; {0,2}(Mini-3iX)(?: Build|\) AppleWebKit)'
|
2324
2628
|
device_replacement: 'Dell $1'
|
2325
2629
|
brand_replacement: 'Dell'
|
2326
2630
|
model_replacement: '$1'
|
2327
|
-
- regex: ';
|
2631
|
+
- regex: '; {0,2}(?:Dell|DELL)[ _](Aero|Venue|Thunder|Mini.{0,200}?|Streak[ _]Pro)(?: Build|\) AppleWebKit)'
|
2328
2632
|
device_replacement: 'Dell $1'
|
2329
2633
|
brand_replacement: 'Dell'
|
2330
2634
|
model_replacement: '$1'
|
2331
|
-
- regex: ';
|
2332
|
-
device_replacement: 'Dell $1'
|
2333
|
-
brand_replacement: 'Dell'
|
2334
|
-
model_replacement: '$1'
|
2335
|
-
- regex: '; *Dell ([^;/]+?)(?: Build|\) AppleWebKit)'
|
2635
|
+
- regex: '; {0,2}Dell[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2336
2636
|
device_replacement: 'Dell $1'
|
2337
2637
|
brand_replacement: 'Dell'
|
2338
2638
|
model_replacement: '$1'
|
@@ -2341,7 +2641,7 @@ device_parsers:
|
|
2341
2641
|
# Denver
|
2342
2642
|
# @ref: http://www.denver-electronics.com/tablets1/
|
2343
2643
|
#########
|
2344
|
-
- regex: ';
|
2644
|
+
- regex: '; {0,2}(TA[CD]-\d+[^;/]{0,100})(?: Build|\) AppleWebKit)'
|
2345
2645
|
device_replacement: '$1'
|
2346
2646
|
brand_replacement: 'Denver'
|
2347
2647
|
model_replacement: '$1'
|
@@ -2350,7 +2650,7 @@ device_parsers:
|
|
2350
2650
|
# Dex
|
2351
2651
|
# @ref: http://dex.ua/
|
2352
2652
|
#########
|
2353
|
-
- regex: ';
|
2653
|
+
- regex: '; {0,2}(iP[789]\d{2}(?:-3G)?|IP10\d{2}(?:-8GB)?)(?: Build|\) AppleWebKit)'
|
2354
2654
|
device_replacement: '$1'
|
2355
2655
|
brand_replacement: 'Dex'
|
2356
2656
|
model_replacement: '$1'
|
@@ -2359,7 +2659,7 @@ device_parsers:
|
|
2359
2659
|
# DNS AirTab
|
2360
2660
|
# @ref: http://www.dns-shop.ru/
|
2361
2661
|
#########
|
2362
|
-
- regex: ';
|
2662
|
+
- regex: '; {0,2}(AirTab)[ _\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2363
2663
|
device_replacement: '$1 $2'
|
2364
2664
|
brand_replacement: 'DNS'
|
2365
2665
|
model_replacement: '$1 $2'
|
@@ -2368,43 +2668,43 @@ device_parsers:
|
|
2368
2668
|
# Docomo (Operator Branded Device)
|
2369
2669
|
# @ref: http://www.ipentec.com/document/document.aspx?page=android-useragent
|
2370
2670
|
#########
|
2371
|
-
- regex: ';
|
2671
|
+
- regex: '; {0,2}(F\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2372
2672
|
device_replacement: '$1'
|
2373
2673
|
brand_replacement: 'Fujitsu'
|
2374
2674
|
model_replacement: '$1'
|
2375
|
-
- regex: ';
|
2675
|
+
- regex: '; {0,2}(HT-03A)(?: Build|\) AppleWebKit)'
|
2376
2676
|
device_replacement: '$1'
|
2377
2677
|
brand_replacement: 'HTC'
|
2378
2678
|
model_replacement: 'Magic'
|
2379
|
-
- regex: ';
|
2679
|
+
- regex: '; {0,2}(HT\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2380
2680
|
device_replacement: '$1'
|
2381
2681
|
brand_replacement: 'HTC'
|
2382
2682
|
model_replacement: '$1'
|
2383
|
-
- regex: ';
|
2683
|
+
- regex: '; {0,2}(L\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2384
2684
|
device_replacement: '$1'
|
2385
2685
|
brand_replacement: 'LG'
|
2386
2686
|
model_replacement: '$1'
|
2387
|
-
- regex: ';
|
2687
|
+
- regex: '; {0,2}(N\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2388
2688
|
device_replacement: '$1'
|
2389
2689
|
brand_replacement: 'Nec'
|
2390
2690
|
model_replacement: '$1'
|
2391
|
-
- regex: ';
|
2691
|
+
- regex: '; {0,2}(P\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2392
2692
|
device_replacement: '$1'
|
2393
2693
|
brand_replacement: 'Panasonic'
|
2394
2694
|
model_replacement: '$1'
|
2395
|
-
- regex: ';
|
2695
|
+
- regex: '; {0,2}(SC\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2396
2696
|
device_replacement: '$1'
|
2397
2697
|
brand_replacement: 'Samsung'
|
2398
2698
|
model_replacement: '$1'
|
2399
|
-
- regex: ';
|
2699
|
+
- regex: '; {0,2}(SH\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2400
2700
|
device_replacement: '$1'
|
2401
2701
|
brand_replacement: 'Sharp'
|
2402
2702
|
model_replacement: '$1'
|
2403
|
-
- regex: ';
|
2703
|
+
- regex: '; {0,2}(SO\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2404
2704
|
device_replacement: '$1'
|
2405
2705
|
brand_replacement: 'SonyEricsson'
|
2406
2706
|
model_replacement: '$1'
|
2407
|
-
- regex: ';
|
2707
|
+
- regex: '; {0,2}(T\-0[12][^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2408
2708
|
device_replacement: '$1'
|
2409
2709
|
brand_replacement: 'Toshiba'
|
2410
2710
|
model_replacement: '$1'
|
@@ -2413,7 +2713,7 @@ device_parsers:
|
|
2413
2713
|
# DOOV
|
2414
2714
|
# @ref: http://www.doov.com.cn/
|
2415
2715
|
#########
|
2416
|
-
- regex: ';
|
2716
|
+
- regex: '; {0,2}(DOOV)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2417
2717
|
device_replacement: '$1 $2'
|
2418
2718
|
brand_replacement: 'DOOV'
|
2419
2719
|
model_replacement: '$2'
|
@@ -2422,7 +2722,7 @@ device_parsers:
|
|
2422
2722
|
# Enot
|
2423
2723
|
# @ref: http://www.enot.ua/
|
2424
2724
|
#########
|
2425
|
-
- regex: ';
|
2725
|
+
- regex: '; {0,2}(Enot|ENOT)[ -]?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2426
2726
|
device_replacement: '$1 $2'
|
2427
2727
|
brand_replacement: 'Enot'
|
2428
2728
|
model_replacement: '$2'
|
@@ -2431,11 +2731,11 @@ device_parsers:
|
|
2431
2731
|
# Evercoss
|
2432
2732
|
# @ref: http://evercoss.com/android/
|
2433
2733
|
#########
|
2434
|
-
- regex: ';
|
2734
|
+
- regex: '; {0,2}[^;/]{1,100} Build/(?:CROSS|Cross)+[ _\-]([^\)]+)'
|
2435
2735
|
device_replacement: 'CROSS $1'
|
2436
2736
|
brand_replacement: 'Evercoss'
|
2437
2737
|
model_replacement: 'Cross $1'
|
2438
|
-
- regex: ';
|
2738
|
+
- regex: '; {0,2}(CROSS|Cross)[ _\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2439
2739
|
device_replacement: '$1 $2'
|
2440
2740
|
brand_replacement: 'Evercoss'
|
2441
2741
|
model_replacement: 'Cross $2'
|
@@ -2444,7 +2744,7 @@ device_parsers:
|
|
2444
2744
|
# Explay
|
2445
2745
|
# @ref: http://explay.ru/
|
2446
2746
|
#########
|
2447
|
-
- regex: ';
|
2747
|
+
- regex: '; {0,2}Explay[_ ](.{1,200}?)(?:[\)]| Build)'
|
2448
2748
|
device_replacement: '$1'
|
2449
2749
|
brand_replacement: 'Explay'
|
2450
2750
|
model_replacement: '$1'
|
@@ -2453,11 +2753,11 @@ device_parsers:
|
|
2453
2753
|
# Fly
|
2454
2754
|
# @ref: http://www.fly-phone.com/
|
2455
2755
|
#########
|
2456
|
-
- regex: ';
|
2756
|
+
- regex: '; {0,2}(IQ.{0,200}?)(?: Build|\) AppleWebKit)'
|
2457
2757
|
device_replacement: '$1'
|
2458
2758
|
brand_replacement: 'Fly'
|
2459
2759
|
model_replacement: '$1'
|
2460
|
-
- regex: ';
|
2760
|
+
- regex: '; {0,2}(Fly|FLY)[ _](IQ[^;]{1,100}?|F[34]\d+[^;]{0,100}?);?(?: Build|\) AppleWebKit)'
|
2461
2761
|
device_replacement: '$1 $2'
|
2462
2762
|
brand_replacement: 'Fly'
|
2463
2763
|
model_replacement: '$2'
|
@@ -2466,7 +2766,7 @@ device_parsers:
|
|
2466
2766
|
# Fujitsu
|
2467
2767
|
# @ref: http://www.fujitsu.com/global/
|
2468
2768
|
#########
|
2469
|
-
- regex: ';
|
2769
|
+
- regex: '; {0,2}(M532|Q572|FJL21)(?: Build|\) AppleWebKit)'
|
2470
2770
|
device_replacement: '$1'
|
2471
2771
|
brand_replacement: 'Fujitsu'
|
2472
2772
|
model_replacement: '$1'
|
@@ -2475,7 +2775,7 @@ device_parsers:
|
|
2475
2775
|
# Galapad
|
2476
2776
|
# @ref: http://www.galapad.net/product.html
|
2477
2777
|
#########
|
2478
|
-
- regex: ';
|
2778
|
+
- regex: '; {0,2}(G1)(?: Build|\) AppleWebKit)'
|
2479
2779
|
device_replacement: '$1'
|
2480
2780
|
brand_replacement: 'Galapad'
|
2481
2781
|
model_replacement: '$1'
|
@@ -2484,7 +2784,7 @@ device_parsers:
|
|
2484
2784
|
# Geeksphone
|
2485
2785
|
# @ref: http://www.geeksphone.com/
|
2486
2786
|
#########
|
2487
|
-
- regex: ';
|
2787
|
+
- regex: '; {0,2}(Geeksphone) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2488
2788
|
device_replacement: '$1 $2'
|
2489
2789
|
brand_replacement: '$1'
|
2490
2790
|
model_replacement: '$2'
|
@@ -2493,8 +2793,7 @@ device_parsers:
|
|
2493
2793
|
# Gfive
|
2494
2794
|
# @ref: http://www.gfivemobile.com/en
|
2495
2795
|
#########
|
2496
|
-
|
2497
|
-
- regex: '; *(G[^F]?FIVE) ([^;/]+?)(?: Build|\) AppleWebKit)'
|
2796
|
+
- regex: '; {0,2}(G[^F]?FIVE) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2498
2797
|
device_replacement: '$1 $2'
|
2499
2798
|
brand_replacement: 'Gfive'
|
2500
2799
|
model_replacement: '$2'
|
@@ -2503,16 +2802,16 @@ device_parsers:
|
|
2503
2802
|
# Gionee
|
2504
2803
|
# @ref: http://www.gionee.com/
|
2505
2804
|
#########
|
2506
|
-
- regex: ';
|
2805
|
+
- regex: '; {0,2}(Gionee)[ _\-]([^;/]{1,100}?)(?:/[^;/]{1,100}|)(?: Build|\) AppleWebKit)'
|
2507
2806
|
regex_flag: 'i'
|
2508
2807
|
device_replacement: '$1 $2'
|
2509
2808
|
brand_replacement: 'Gionee'
|
2510
2809
|
model_replacement: '$2'
|
2511
|
-
- regex: ';
|
2810
|
+
- regex: '; {0,2}(GN\d+[A-Z]?|INFINITY_PASSION|Ctrl_V1)(?: Build|\) AppleWebKit)'
|
2512
2811
|
device_replacement: 'Gionee $1'
|
2513
2812
|
brand_replacement: 'Gionee'
|
2514
2813
|
model_replacement: '$1'
|
2515
|
-
- regex: ';
|
2814
|
+
- regex: '; {0,2}(E3) Build/JOP40D'
|
2516
2815
|
device_replacement: 'Gionee $1'
|
2517
2816
|
brand_replacement: 'Gionee'
|
2518
2817
|
model_replacement: '$1'
|
@@ -2526,11 +2825,11 @@ device_parsers:
|
|
2526
2825
|
# GoClever
|
2527
2826
|
# @ref: http://www.goclever.com
|
2528
2827
|
#########
|
2529
|
-
- regex: ';
|
2828
|
+
- regex: '; {0,2}((?:FONE|QUANTUM|INSIGNIA) \d+[^;/]{0,100}|PLAYTAB)(?: Build|\) AppleWebKit)'
|
2530
2829
|
device_replacement: 'GoClever $1'
|
2531
2830
|
brand_replacement: 'GoClever'
|
2532
2831
|
model_replacement: '$1'
|
2533
|
-
- regex: ';
|
2832
|
+
- regex: '; {0,2}GOCLEVER ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2534
2833
|
device_replacement: 'GoClever $1'
|
2535
2834
|
brand_replacement: 'GoClever'
|
2536
2835
|
model_replacement: '$1'
|
@@ -2539,20 +2838,24 @@ device_parsers:
|
|
2539
2838
|
# Google
|
2540
2839
|
# @ref: http://www.google.de/glass/start/
|
2541
2840
|
#########
|
2542
|
-
- regex: ';
|
2841
|
+
- regex: '; {0,2}(Glass \d+)(?: Build|\) AppleWebKit)'
|
2543
2842
|
device_replacement: '$1'
|
2544
2843
|
brand_replacement: 'Google'
|
2545
2844
|
model_replacement: '$1'
|
2546
|
-
- regex: ';
|
2547
|
-
device_replacement: '$
|
2845
|
+
- regex: '; {0,2}([g|G]oogle)? (Pixel[ a-zA-z0-9]{1,100});(?: Build|.{0,50}\) AppleWebKit)'
|
2846
|
+
device_replacement: '$2'
|
2548
2847
|
brand_replacement: 'Google'
|
2549
|
-
model_replacement: '$
|
2848
|
+
model_replacement: '$2'
|
2849
|
+
- regex: '; {0,2}([g|G]oogle)? (Pixel.{0,200}?)(?: Build|\) AppleWebKit)'
|
2850
|
+
device_replacement: '$2'
|
2851
|
+
brand_replacement: 'Google'
|
2852
|
+
model_replacement: '$2'
|
2550
2853
|
|
2551
2854
|
#########
|
2552
2855
|
# Gigabyte
|
2553
2856
|
# @ref: http://gsmart.gigabytecm.com/en/
|
2554
2857
|
#########
|
2555
|
-
- regex: ';
|
2858
|
+
- regex: '; {0,2}(GSmart)[ -]([^/]{1,50})(?: Build|\) AppleWebKit)'
|
2556
2859
|
device_replacement: '$1 $2'
|
2557
2860
|
brand_replacement: 'Gigabyte'
|
2558
2861
|
model_replacement: '$1 $2'
|
@@ -2561,7 +2864,7 @@ device_parsers:
|
|
2561
2864
|
# Freescale development boards
|
2562
2865
|
# @ref: http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=IMX53QSB
|
2563
2866
|
#########
|
2564
|
-
- regex: ';
|
2867
|
+
- regex: '; {0,2}(imx5[13]_[^/]{1,50})(?: Build|\) AppleWebKit)'
|
2565
2868
|
device_replacement: 'Freescale $1'
|
2566
2869
|
brand_replacement: 'Freescale'
|
2567
2870
|
model_replacement: '$1'
|
@@ -2571,11 +2874,11 @@ device_parsers:
|
|
2571
2874
|
# @ref: http://www.haier.com/
|
2572
2875
|
# @ref: http://www.haier.com/de/produkte/tablet/
|
2573
2876
|
#########
|
2574
|
-
- regex: ';
|
2877
|
+
- regex: '; {0,2}Haier[ _\-]([^/]{1,50})(?: Build|\) AppleWebKit)'
|
2575
2878
|
device_replacement: 'Haier $1'
|
2576
2879
|
brand_replacement: 'Haier'
|
2577
2880
|
model_replacement: '$1'
|
2578
|
-
- regex: ';
|
2881
|
+
- regex: '; {0,2}(PAD1016)(?: Build|\) AppleWebKit)'
|
2579
2882
|
device_replacement: 'Haipad $1'
|
2580
2883
|
brand_replacement: 'Haipad'
|
2581
2884
|
model_replacement: '$1'
|
@@ -2585,7 +2888,7 @@ device_parsers:
|
|
2585
2888
|
# @ref: http://www.haipad.net/
|
2586
2889
|
# @models: V7P|M7SM7S|M9XM9X|M7XM7X|M9|M8|M7-M|M1002|M7|M701
|
2587
2890
|
#########
|
2588
|
-
- regex: ';
|
2891
|
+
- regex: '; {0,2}(M701|M7|M8|M9)(?: Build|\) AppleWebKit)'
|
2589
2892
|
device_replacement: 'Haipad $1'
|
2590
2893
|
brand_replacement: 'Haipad'
|
2591
2894
|
model_replacement: '$1'
|
@@ -2595,7 +2898,7 @@ device_parsers:
|
|
2595
2898
|
# @ref: http://www.hannspree.eu/
|
2596
2899
|
# @models: SN10T1|SN10T2|SN70T31B|SN70T32W
|
2597
2900
|
#########
|
2598
|
-
- regex: ';
|
2901
|
+
- regex: '; {0,2}(SN\d+T[^;\)/]*)(?: Build|[;\)])'
|
2599
2902
|
device_replacement: 'Hannspree $1'
|
2600
2903
|
brand_replacement: 'Hannspree'
|
2601
2904
|
model_replacement: '$1'
|
@@ -2604,11 +2907,11 @@ device_parsers:
|
|
2604
2907
|
# HCLme
|
2605
2908
|
# @ref: http://www.hclmetablet.com/india/
|
2606
2909
|
#########
|
2607
|
-
- regex: 'Build/HCL ME Tablet ([^;\)]
|
2910
|
+
- regex: 'Build/HCL ME Tablet ([^;\)]{1,3})[\);]'
|
2608
2911
|
device_replacement: 'HCLme $1'
|
2609
2912
|
brand_replacement: 'HCLme'
|
2610
2913
|
model_replacement: '$1'
|
2611
|
-
- regex: ';
|
2914
|
+
- regex: '; {0,2}([^;\/]+) Build/HCL'
|
2612
2915
|
device_replacement: 'HCLme $1'
|
2613
2916
|
brand_replacement: 'HCLme'
|
2614
2917
|
model_replacement: '$1'
|
@@ -2617,7 +2920,7 @@ device_parsers:
|
|
2617
2920
|
# Hena
|
2618
2921
|
# @ref: http://www.henadigital.com/en/product/index.asp?id=6
|
2619
2922
|
#########
|
2620
|
-
- regex: ';
|
2923
|
+
- regex: '; {0,2}(MID-?\d{4}C[EM])(?: Build|\) AppleWebKit)'
|
2621
2924
|
device_replacement: 'Hena $1'
|
2622
2925
|
brand_replacement: 'Hena'
|
2623
2926
|
model_replacement: '$1'
|
@@ -2626,11 +2929,11 @@ device_parsers:
|
|
2626
2929
|
# Hisense
|
2627
2930
|
# @ref: http://www.hisense.com/
|
2628
2931
|
#########
|
2629
|
-
- regex: ';
|
2932
|
+
- regex: '; {0,2}(EG\d{2,}|HS-[^;/]{1,100}|MIRA[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2630
2933
|
device_replacement: 'Hisense $1'
|
2631
2934
|
brand_replacement: 'Hisense'
|
2632
2935
|
model_replacement: '$1'
|
2633
|
-
- regex: ';
|
2936
|
+
- regex: '; {0,2}(andromax[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2634
2937
|
regex_flag: 'i'
|
2635
2938
|
device_replacement: 'Hisense $1'
|
2636
2939
|
brand_replacement: 'Hisense'
|
@@ -2640,7 +2943,7 @@ device_parsers:
|
|
2640
2943
|
# hitech
|
2641
2944
|
# @ref: http://www.hitech-mobiles.com/
|
2642
2945
|
#########
|
2643
|
-
- regex: ';
|
2946
|
+
- regex: '; {0,2}(?:AMAZE[ _](S\d+)|(S\d+)[ _]AMAZE)(?: Build|\) AppleWebKit)'
|
2644
2947
|
device_replacement: 'AMAZE $1$2'
|
2645
2948
|
brand_replacement: 'hitech'
|
2646
2949
|
model_replacement: 'AMAZE $1$2'
|
@@ -2649,15 +2952,15 @@ device_parsers:
|
|
2649
2952
|
# HP
|
2650
2953
|
# @ref: http://www.hp.com/
|
2651
2954
|
#########
|
2652
|
-
- regex: ';
|
2955
|
+
- regex: '; {0,2}(PlayBook)(?: Build|\) AppleWebKit)'
|
2653
2956
|
device_replacement: 'HP $1'
|
2654
2957
|
brand_replacement: 'HP'
|
2655
2958
|
model_replacement: '$1'
|
2656
|
-
- regex: ';
|
2959
|
+
- regex: '; {0,2}HP ([^/]{1,50})(?: Build|\) AppleWebKit)'
|
2657
2960
|
device_replacement: 'HP $1'
|
2658
2961
|
brand_replacement: 'HP'
|
2659
2962
|
model_replacement: '$1'
|
2660
|
-
- regex: ';
|
2963
|
+
- regex: '; {0,2}([^/]{1,30}_tenderloin)(?: Build|\) AppleWebKit)'
|
2661
2964
|
device_replacement: 'HP TouchPad'
|
2662
2965
|
brand_replacement: 'HP'
|
2663
2966
|
model_replacement: 'TouchPad'
|
@@ -2667,62 +2970,66 @@ device_parsers:
|
|
2667
2970
|
# @ref: http://www.huaweidevice.com
|
2668
2971
|
# @note: Needs to be before HTC due to Desire HD Build on U8815
|
2669
2972
|
#########
|
2670
|
-
- regex: ';
|
2973
|
+
- regex: '; {0,2}(HUAWEI |Huawei-|)([UY][^;/]{1,100}) Build/(?:Huawei|HUAWEI)([UY][^\);]+)\)'
|
2671
2974
|
device_replacement: '$1$2'
|
2672
2975
|
brand_replacement: 'Huawei'
|
2673
2976
|
model_replacement: '$2'
|
2674
|
-
- regex: ';
|
2977
|
+
- regex: '; {0,2}([^;/]{1,100}) Build[/ ]Huawei(MT1-U06|[A-Z]{1,50}\d+[^\);]{1,50})\)'
|
2675
2978
|
device_replacement: '$1'
|
2676
2979
|
brand_replacement: 'Huawei'
|
2677
2980
|
model_replacement: '$2'
|
2678
|
-
- regex: ';
|
2981
|
+
- regex: '; {0,2}(S7|M860) Build'
|
2679
2982
|
device_replacement: '$1'
|
2680
2983
|
brand_replacement: 'Huawei'
|
2681
2984
|
model_replacement: '$1'
|
2682
|
-
- regex: ';
|
2985
|
+
- regex: '; {0,2}((?:HUAWEI|Huawei)[ \-]?)(MediaPad) Build'
|
2683
2986
|
device_replacement: '$1$2'
|
2684
2987
|
brand_replacement: 'Huawei'
|
2685
2988
|
model_replacement: '$2'
|
2686
|
-
- regex: ';
|
2989
|
+
- regex: '; {0,2}((?:HUAWEI[ _]?|Huawei[ _]|)Ascend[ _])([^;/]{1,100}) Build'
|
2687
2990
|
device_replacement: '$1$2'
|
2688
2991
|
brand_replacement: 'Huawei'
|
2689
2992
|
model_replacement: '$2'
|
2690
|
-
- regex: ';
|
2993
|
+
- regex: '; {0,2}((?:HUAWEI|Huawei)[ _\-]?)((?:G700-|MT-)[^;/]{1,100}) Build'
|
2691
2994
|
device_replacement: '$1$2'
|
2692
2995
|
brand_replacement: 'Huawei'
|
2693
2996
|
model_replacement: '$2'
|
2694
|
-
- regex: ';
|
2997
|
+
- regex: '; {0,2}((?:HUAWEI|Huawei)[ _\-]?)([^;/]{1,100}) Build'
|
2695
2998
|
device_replacement: '$1$2'
|
2696
2999
|
brand_replacement: 'Huawei'
|
2697
3000
|
model_replacement: '$2'
|
2698
|
-
- regex: ';
|
3001
|
+
- regex: '; {0,2}(MediaPad[^;]{1,200}|SpringBoard) Build/Huawei'
|
2699
3002
|
device_replacement: '$1'
|
2700
3003
|
brand_replacement: 'Huawei'
|
2701
3004
|
model_replacement: '$1'
|
2702
|
-
- regex: ';
|
3005
|
+
- regex: '; {0,2}([^;]{1,200}) Build/(?:Huawei|HUAWEI)'
|
2703
3006
|
device_replacement: '$1'
|
2704
3007
|
brand_replacement: 'Huawei'
|
2705
3008
|
model_replacement: '$1'
|
2706
|
-
- regex: ';
|
3009
|
+
- regex: '; {0,2}([Uu])([89]\d{3}) Build'
|
2707
3010
|
device_replacement: '$1$2'
|
2708
3011
|
brand_replacement: 'Huawei'
|
2709
3012
|
model_replacement: 'U$2'
|
2710
|
-
- regex: ';
|
3013
|
+
- regex: '; {0,2}(?:Ideos |IDEOS )(S7) Build'
|
2711
3014
|
device_replacement: 'Huawei Ideos$1'
|
2712
3015
|
brand_replacement: 'Huawei'
|
2713
3016
|
model_replacement: 'Ideos$1'
|
2714
|
-
- regex: ';
|
3017
|
+
- regex: '; {0,2}(?:Ideos |IDEOS )([^;/]{1,50}\s{0,5}|\s{0,5})Build'
|
2715
3018
|
device_replacement: 'Huawei Ideos$1'
|
2716
3019
|
brand_replacement: 'Huawei'
|
2717
3020
|
model_replacement: 'Ideos$1'
|
2718
|
-
- regex: ';
|
3021
|
+
- regex: '; {0,2}(Orange Daytona|Pulse|Pulse Mini|Vodafone 858|C8500|C8600|C8650|C8660|Nexus 6P|ATH-.{1,200}?) Build[/ ]'
|
2719
3022
|
device_replacement: 'Huawei $1'
|
2720
3023
|
brand_replacement: 'Huawei'
|
2721
3024
|
model_replacement: '$1'
|
2722
|
-
- regex: ';
|
3025
|
+
- regex: '; {0,2}((?:[A-Z]{3})\-L[A-Za0-9]{2})[\)]'
|
2723
3026
|
device_replacement: 'Huawei $1'
|
2724
3027
|
brand_replacement: 'Huawei'
|
2725
3028
|
model_replacement: '$1'
|
3029
|
+
- regex: '; {0,2}([^;]{1,200}) Build/(HONOR|Honor)'
|
3030
|
+
device_replacement: 'Huawei Honor $1'
|
3031
|
+
brand_replacement: 'Huawei'
|
3032
|
+
model_replacement: 'Honor $1'
|
2726
3033
|
|
2727
3034
|
#########
|
2728
3035
|
# HTC
|
@@ -2730,7 +3037,7 @@ device_parsers:
|
|
2730
3037
|
# @ref: http://en.wikipedia.org/wiki/List_of_HTC_phones
|
2731
3038
|
#########
|
2732
3039
|
|
2733
|
-
- regex: ';
|
3040
|
+
- regex: '; {0,2}HTC[ _]([^;]{1,200}); Windows Phone'
|
2734
3041
|
device_replacement: 'HTC $1'
|
2735
3042
|
brand_replacement: 'HTC'
|
2736
3043
|
model_replacement: '$1'
|
@@ -2738,59 +3045,59 @@ device_parsers:
|
|
2738
3045
|
# Android HTC with Version Number matcher
|
2739
3046
|
# ; HTC_0P3Z11/1.12.161.3 Build
|
2740
3047
|
# ;HTC_A3335 V2.38.841.1 Build
|
2741
|
-
- regex: ';
|
3048
|
+
- regex: '; {0,2}(?:HTC[ _/])+([^ _/]+)(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: {0,2}Build|\))'
|
2742
3049
|
device_replacement: 'HTC $1'
|
2743
3050
|
brand_replacement: 'HTC'
|
2744
3051
|
model_replacement: '$1'
|
2745
|
-
- regex: ';
|
3052
|
+
- regex: '; {0,2}(?:HTC[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)|)(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: {0,2}Build|\))'
|
2746
3053
|
device_replacement: 'HTC $1 $2'
|
2747
3054
|
brand_replacement: 'HTC'
|
2748
3055
|
model_replacement: '$1 $2'
|
2749
|
-
- regex: ';
|
3056
|
+
- regex: '; {0,2}(?:HTC[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)|)|)(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: {0,2}Build|\))'
|
2750
3057
|
device_replacement: 'HTC $1 $2 $3'
|
2751
3058
|
brand_replacement: 'HTC'
|
2752
3059
|
model_replacement: '$1 $2 $3'
|
2753
|
-
- regex: ';
|
3060
|
+
- regex: '; {0,2}(?:HTC[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)|)|)|)(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: {0,2}Build|\))'
|
2754
3061
|
device_replacement: 'HTC $1 $2 $3 $4'
|
2755
3062
|
brand_replacement: 'HTC'
|
2756
3063
|
model_replacement: '$1 $2 $3 $4'
|
2757
3064
|
|
2758
3065
|
# Android HTC without Version Number matcher
|
2759
|
-
- regex: ';
|
3066
|
+
- regex: '; {0,2}(?:(?:HTC|htc)(?:_blocked|)[ _/])+([^ _/;]+)(?: {0,2}Build|[;\)]| - )'
|
2760
3067
|
device_replacement: 'HTC $1'
|
2761
3068
|
brand_replacement: 'HTC'
|
2762
3069
|
model_replacement: '$1'
|
2763
|
-
- regex: ';
|
3070
|
+
- regex: '; {0,2}(?:(?:HTC|htc)(?:_blocked|)[ _/])+([^ _/]+)(?:[ _/]([^ _/;\)]+)|)(?: {0,2}Build|[;\)]| - )'
|
2764
3071
|
device_replacement: 'HTC $1 $2'
|
2765
3072
|
brand_replacement: 'HTC'
|
2766
3073
|
model_replacement: '$1 $2'
|
2767
|
-
- regex: ';
|
3074
|
+
- regex: '; {0,2}(?:(?:HTC|htc)(?:_blocked|)[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/;\)]+)|)|)(?: {0,2}Build|[;\)]| - )'
|
2768
3075
|
device_replacement: 'HTC $1 $2 $3'
|
2769
3076
|
brand_replacement: 'HTC'
|
2770
3077
|
model_replacement: '$1 $2 $3'
|
2771
|
-
- regex: ';
|
3078
|
+
- regex: '; {0,2}(?:(?:HTC|htc)(?:_blocked|)[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ /;]+)|)|)|)(?: {0,2}Build|[;\)]| - )'
|
2772
3079
|
device_replacement: 'HTC $1 $2 $3 $4'
|
2773
3080
|
brand_replacement: 'HTC'
|
2774
3081
|
model_replacement: '$1 $2 $3 $4'
|
2775
3082
|
|
2776
3083
|
# HTC Streaming Player
|
2777
|
-
- regex: 'HTC Streaming Player [^\/]
|
3084
|
+
- regex: 'HTC Streaming Player [^\/]{0,30}/[^\/]{0,10}/ htc_([^/]{1,10}) /'
|
2778
3085
|
device_replacement: 'HTC $1'
|
2779
3086
|
brand_replacement: 'HTC'
|
2780
3087
|
model_replacement: '$1'
|
2781
3088
|
# general matcher for anything else
|
2782
|
-
- regex: '(?:[;,]
|
3089
|
+
- regex: '(?:[;,] {0,2}|^)(?:htccn_chs-|)HTC[ _-]?([^;]{1,200}?)(?: {0,2}Build|clay|Android|-?Mozilla| Opera| Profile| UNTRUSTED|[;/\(\)]|$)'
|
2783
3090
|
regex_flag: 'i'
|
2784
3091
|
device_replacement: 'HTC $1'
|
2785
3092
|
brand_replacement: 'HTC'
|
2786
3093
|
model_replacement: '$1'
|
2787
3094
|
# Android matchers without HTC
|
2788
|
-
- regex: ';
|
3095
|
+
- 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
3096
|
regex_flag: 'i'
|
2790
3097
|
device_replacement: 'HTC $1'
|
2791
3098
|
brand_replacement: 'HTC'
|
2792
3099
|
model_replacement: '$1'
|
2793
|
-
- regex: ';
|
3100
|
+
- 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
3101
|
regex_flag: 'i'
|
2795
3102
|
device_replacement: 'HTC $1 $2'
|
2796
3103
|
brand_replacement: 'HTC'
|
@@ -2800,16 +3107,16 @@ device_parsers:
|
|
2800
3107
|
# Hyundai
|
2801
3108
|
# @ref: http://www.hyundaitechnologies.com
|
2802
3109
|
#########
|
2803
|
-
- regex: ';
|
3110
|
+
- regex: '; {0,2}HYUNDAI (T\d[^/]{0,10})(?: Build|\) AppleWebKit)'
|
2804
3111
|
device_replacement: 'Hyundai $1'
|
2805
3112
|
brand_replacement: 'Hyundai'
|
2806
3113
|
model_replacement: '$1'
|
2807
|
-
- regex: ';
|
3114
|
+
- regex: '; {0,2}HYUNDAI ([^;/]{1,10}?)(?: Build|\) AppleWebKit)'
|
2808
3115
|
device_replacement: 'Hyundai $1'
|
2809
3116
|
brand_replacement: 'Hyundai'
|
2810
3117
|
model_replacement: '$1'
|
2811
3118
|
# X900? http://www.amazon.com/Hyundai-X900-Retina-Android-Bluetooth/dp/B00AO07H3O
|
2812
|
-
- regex: ';
|
3119
|
+
- regex: '; {0,2}(X700|Hold X|MB-6900)(?: Build|\) AppleWebKit)'
|
2813
3120
|
device_replacement: 'Hyundai $1'
|
2814
3121
|
brand_replacement: 'Hyundai'
|
2815
3122
|
model_replacement: '$1'
|
@@ -2818,12 +3125,12 @@ device_parsers:
|
|
2818
3125
|
# iBall
|
2819
3126
|
# @ref: http://www.iball.co.in/Category/Mobiles/22
|
2820
3127
|
#########
|
2821
|
-
- regex: ';
|
3128
|
+
- regex: '; {0,2}(?:iBall[ _\-]|)(Andi)[ _]?(\d[^;/]*)(?: Build|\) AppleWebKit)'
|
2822
3129
|
regex_flag: 'i'
|
2823
3130
|
device_replacement: '$1 $2'
|
2824
3131
|
brand_replacement: 'iBall'
|
2825
3132
|
model_replacement: '$1 $2'
|
2826
|
-
- regex: ';
|
3133
|
+
- regex: '; {0,2}(IBall)(?:[ _]([^;/]{1,100}?)|)(?: Build|\) AppleWebKit)'
|
2827
3134
|
regex_flag: 'i'
|
2828
3135
|
device_replacement: '$1 $2'
|
2829
3136
|
brand_replacement: 'iBall'
|
@@ -2833,7 +3140,7 @@ device_parsers:
|
|
2833
3140
|
# IconBIT
|
2834
3141
|
# @ref: http://www.iconbit.com/catalog/tablets/
|
2835
3142
|
#########
|
2836
|
-
- regex: ';
|
3143
|
+
- 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
3144
|
device_replacement: '$1'
|
2838
3145
|
brand_replacement: 'IconBIT'
|
2839
3146
|
model_replacement: '$1'
|
@@ -2842,7 +3149,7 @@ device_parsers:
|
|
2842
3149
|
# IMO
|
2843
3150
|
# @ref: http://www.ponselimo.com/
|
2844
3151
|
#########
|
2845
|
-
- regex: ';
|
3152
|
+
- regex: '; {0,2}(IMO)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2846
3153
|
regex_flag: 'i'
|
2847
3154
|
device_replacement: '$1 $2'
|
2848
3155
|
brand_replacement: 'IMO'
|
@@ -2852,12 +3159,12 @@ device_parsers:
|
|
2852
3159
|
# i-mobile
|
2853
3160
|
# @ref: http://www.i-mobilephone.com/
|
2854
3161
|
#########
|
2855
|
-
- regex: ';
|
3162
|
+
- regex: '; {0,2}i-?mobile[ _]([^/]{1,50})(?: Build|\) AppleWebKit)'
|
2856
3163
|
regex_flag: 'i'
|
2857
3164
|
device_replacement: 'i-mobile $1'
|
2858
3165
|
brand_replacement: 'imobile'
|
2859
3166
|
model_replacement: '$1'
|
2860
|
-
- regex: ';
|
3167
|
+
- regex: '; {0,2}(i-(?:style|note)[^/]{0,10})(?: Build|\) AppleWebKit)'
|
2861
3168
|
regex_flag: 'i'
|
2862
3169
|
device_replacement: 'i-mobile $1'
|
2863
3170
|
brand_replacement: 'imobile'
|
@@ -2867,7 +3174,7 @@ device_parsers:
|
|
2867
3174
|
# Impression
|
2868
3175
|
# @ref: http://impression.ua/planshetnye-kompyutery
|
2869
3176
|
#########
|
2870
|
-
- regex: ';
|
3177
|
+
- regex: '; {0,2}(ImPAD) ?(\d+(?:.){0,100}?)(?: Build|\) AppleWebKit)'
|
2871
3178
|
device_replacement: '$1 $2'
|
2872
3179
|
brand_replacement: 'Impression'
|
2873
3180
|
model_replacement: '$1 $2'
|
@@ -2876,7 +3183,7 @@ device_parsers:
|
|
2876
3183
|
# Infinix
|
2877
3184
|
# @ref: http://www.infinixmobility.com/index.html
|
2878
3185
|
#########
|
2879
|
-
- regex: ';
|
3186
|
+
- regex: '; {0,2}(Infinix)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2880
3187
|
device_replacement: '$1 $2'
|
2881
3188
|
brand_replacement: 'Infinix'
|
2882
3189
|
model_replacement: '$2'
|
@@ -2885,7 +3192,7 @@ device_parsers:
|
|
2885
3192
|
# Informer
|
2886
3193
|
# @ref: ??
|
2887
3194
|
#########
|
2888
|
-
- regex: ';
|
3195
|
+
- regex: '; {0,2}(Informer)[ \-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2889
3196
|
device_replacement: '$1 $2'
|
2890
3197
|
brand_replacement: 'Informer'
|
2891
3198
|
model_replacement: '$2'
|
@@ -2895,7 +3202,7 @@ device_parsers:
|
|
2895
3202
|
# @ref: http://www.intenso.de
|
2896
3203
|
# @models: 7":TAB 714,TAB 724;8":TAB 814,TAB 824;10":TAB 1004
|
2897
3204
|
#########
|
2898
|
-
- regex: ';
|
3205
|
+
- regex: '; {0,2}(TAB) ?([78][12]4)(?: Build|\) AppleWebKit)'
|
2899
3206
|
device_replacement: 'Intenso $1'
|
2900
3207
|
brand_replacement: 'Intenso'
|
2901
3208
|
model_replacement: '$1 $2'
|
@@ -2906,21 +3213,21 @@ device_parsers:
|
|
2906
3213
|
# @note: Zync also offers a "Cloud Z5" device
|
2907
3214
|
#########
|
2908
3215
|
# smartphones
|
2909
|
-
- regex: ';
|
3216
|
+
- regex: '; {0,2}(?:Intex[ _]|)(AQUA|Aqua)([ _\.\-])([^;/]{1,100}?) {0,2}(?:Build|;)'
|
2910
3217
|
device_replacement: '$1$2$3'
|
2911
3218
|
brand_replacement: 'Intex'
|
2912
3219
|
model_replacement: '$1 $3'
|
2913
3220
|
# matches "INTEX CLOUD X1"
|
2914
|
-
- regex: ';
|
3221
|
+
- regex: '; {0,2}(?:INTEX|Intex)(?:[_ ]([^\ _;/]+))(?:[_ ]([^\ _;/]+)|) {0,2}(?:Build|;)'
|
2915
3222
|
device_replacement: '$1 $2'
|
2916
3223
|
brand_replacement: 'Intex'
|
2917
3224
|
model_replacement: '$1 $2'
|
2918
3225
|
# tablets
|
2919
|
-
- regex: ';
|
3226
|
+
- regex: '; {0,2}([iI]Buddy)[ _]?(Connect)(?:_|\?_| |)([^;/]{0,50}) {0,2}(?:Build|;)'
|
2920
3227
|
device_replacement: '$1 $2 $3'
|
2921
3228
|
brand_replacement: 'Intex'
|
2922
3229
|
model_replacement: 'iBuddy $2 $3'
|
2923
|
-
- regex: ';
|
3230
|
+
- regex: '; {0,2}(I-Buddy)[ _]([^;/]{1,100}?) {0,2}(?:Build|;)'
|
2924
3231
|
device_replacement: '$1 $2'
|
2925
3232
|
brand_replacement: 'Intex'
|
2926
3233
|
model_replacement: 'iBuddy $2'
|
@@ -2929,7 +3236,7 @@ device_parsers:
|
|
2929
3236
|
# iOCEAN
|
2930
3237
|
# @ref: http://www.iocean.cc/
|
2931
3238
|
#########
|
2932
|
-
- regex: ';
|
3239
|
+
- regex: '; {0,2}(iOCEAN) ([^/]{1,50})(?: Build|\) AppleWebKit)'
|
2933
3240
|
regex_flag: 'i'
|
2934
3241
|
device_replacement: '$1 $2'
|
2935
3242
|
brand_replacement: 'iOCEAN'
|
@@ -2939,7 +3246,7 @@ device_parsers:
|
|
2939
3246
|
# i.onik
|
2940
3247
|
# @ref: http://www.i-onik.de/
|
2941
3248
|
#########
|
2942
|
-
- regex: ';
|
3249
|
+
- regex: '; {0,2}(TP\d+(?:\.\d+|)\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2943
3250
|
device_replacement: 'ionik $1'
|
2944
3251
|
brand_replacement: 'ionik'
|
2945
3252
|
model_replacement: '$1'
|
@@ -2948,7 +3255,7 @@ device_parsers:
|
|
2948
3255
|
# IRU.ru
|
2949
3256
|
# @ref: http://www.iru.ru/catalog/soho/planetable/
|
2950
3257
|
#########
|
2951
|
-
- regex: ';
|
3258
|
+
- regex: '; {0,2}(M702pro)(?: Build|\) AppleWebKit)'
|
2952
3259
|
device_replacement: '$1'
|
2953
3260
|
brand_replacement: 'Iru'
|
2954
3261
|
model_replacement: '$1'
|
@@ -2957,7 +3264,7 @@ device_parsers:
|
|
2957
3264
|
# Itel Mobile
|
2958
3265
|
# @ref: https://www.itel-mobile.com/global/products/
|
2959
3266
|
#########
|
2960
|
-
- regex: ';
|
3267
|
+
- regex: '; {0,2}itel ([^;/]*)(?: Build|\) AppleWebKit)'
|
2961
3268
|
device_replacement: 'Itel $1'
|
2962
3269
|
brand_replacement: 'Itel'
|
2963
3270
|
model_replacement: '$1'
|
@@ -2967,11 +3274,11 @@ device_parsers:
|
|
2967
3274
|
# @ref: http://www.ivio.com/mobile.php
|
2968
3275
|
# @models: DG80,DG20,DE38,DE88,MD70
|
2969
3276
|
#########
|
2970
|
-
- regex: ';
|
3277
|
+
- regex: '; {0,2}(DE88Plus|MD70)(?: Build|\) AppleWebKit)'
|
2971
3278
|
device_replacement: '$1'
|
2972
3279
|
brand_replacement: 'Ivio'
|
2973
3280
|
model_replacement: '$1'
|
2974
|
-
- regex: ';
|
3281
|
+
- regex: '; {0,2}IVIO[_\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
2975
3282
|
device_replacement: '$1'
|
2976
3283
|
brand_replacement: 'Ivio'
|
2977
3284
|
model_replacement: '$1'
|
@@ -2980,7 +3287,7 @@ device_parsers:
|
|
2980
3287
|
# Jaytech
|
2981
3288
|
# @ref: http://www.jay-tech.de/jaytech/servlet/frontend/
|
2982
3289
|
#########
|
2983
|
-
- regex: ';
|
3290
|
+
- regex: '; {0,2}(TPC-\d+|JAY-TECH)(?: Build|\) AppleWebKit)'
|
2984
3291
|
device_replacement: '$1'
|
2985
3292
|
brand_replacement: 'Jaytech'
|
2986
3293
|
model_replacement: '$1'
|
@@ -2989,7 +3296,7 @@ device_parsers:
|
|
2989
3296
|
# Jiayu
|
2990
3297
|
# @ref: http://www.ejiayu.com/en/Product.html
|
2991
3298
|
#########
|
2992
|
-
- regex: ';
|
3299
|
+
- regex: '; {0,2}(JY-[^;/]{1,100}|G[234]S?)(?: Build|\) AppleWebKit)'
|
2993
3300
|
device_replacement: '$1'
|
2994
3301
|
brand_replacement: 'Jiayu'
|
2995
3302
|
model_replacement: '$1'
|
@@ -2998,7 +3305,7 @@ device_parsers:
|
|
2998
3305
|
# JXD
|
2999
3306
|
# @ref: http://www.jxd.hk/
|
3000
3307
|
#########
|
3001
|
-
- regex: ';
|
3308
|
+
- regex: '; {0,2}(JXD)[ _\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3002
3309
|
device_replacement: '$1 $2'
|
3003
3310
|
brand_replacement: 'JXD'
|
3004
3311
|
model_replacement: '$2'
|
@@ -3007,16 +3314,16 @@ device_parsers:
|
|
3007
3314
|
# Karbonn
|
3008
3315
|
# @ref: http://www.karbonnmobiles.com/products_tablet.php
|
3009
3316
|
#########
|
3010
|
-
- regex: ';
|
3317
|
+
- regex: '; {0,2}Karbonn[ _]?([^;/]{1,100}) {0,2}(?:Build|;)'
|
3011
3318
|
regex_flag: 'i'
|
3012
3319
|
device_replacement: '$1'
|
3013
3320
|
brand_replacement: 'Karbonn'
|
3014
3321
|
model_replacement: '$1'
|
3015
|
-
- regex: ';
|
3322
|
+
- regex: '; {0,2}([^;]{1,200}) Build/Karbonn'
|
3016
3323
|
device_replacement: '$1'
|
3017
3324
|
brand_replacement: 'Karbonn'
|
3018
3325
|
model_replacement: '$1'
|
3019
|
-
- regex: ';
|
3326
|
+
- regex: '; {0,2}(A11|A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2|Titanium S\d) +Build'
|
3020
3327
|
device_replacement: '$1'
|
3021
3328
|
brand_replacement: 'Karbonn'
|
3022
3329
|
model_replacement: '$1'
|
@@ -3025,84 +3332,84 @@ device_parsers:
|
|
3025
3332
|
# KDDI (Operator Branded Device)
|
3026
3333
|
# @ref: http://www.ipentec.com/document/document.aspx?page=android-useragent
|
3027
3334
|
#########
|
3028
|
-
- regex: ';
|
3335
|
+
- regex: '; {0,2}(IS01|IS03|IS05|IS\d{2}SH)(?: Build|\) AppleWebKit)'
|
3029
3336
|
device_replacement: '$1'
|
3030
3337
|
brand_replacement: 'Sharp'
|
3031
3338
|
model_replacement: '$1'
|
3032
|
-
- regex: ';
|
3339
|
+
- regex: '; {0,2}(IS04)(?: Build|\) AppleWebKit)'
|
3033
3340
|
device_replacement: '$1'
|
3034
3341
|
brand_replacement: 'Regza'
|
3035
3342
|
model_replacement: '$1'
|
3036
|
-
- regex: ';
|
3343
|
+
- regex: '; {0,2}(IS06|IS\d{2}PT)(?: Build|\) AppleWebKit)'
|
3037
3344
|
device_replacement: '$1'
|
3038
3345
|
brand_replacement: 'Pantech'
|
3039
3346
|
model_replacement: '$1'
|
3040
|
-
- regex: ';
|
3347
|
+
- regex: '; {0,2}(IS11S)(?: Build|\) AppleWebKit)'
|
3041
3348
|
device_replacement: '$1'
|
3042
3349
|
brand_replacement: 'SonyEricsson'
|
3043
3350
|
model_replacement: 'Xperia Acro'
|
3044
|
-
- regex: ';
|
3351
|
+
- regex: '; {0,2}(IS11CA)(?: Build|\) AppleWebKit)'
|
3045
3352
|
device_replacement: '$1'
|
3046
3353
|
brand_replacement: 'Casio'
|
3047
3354
|
model_replacement: 'GzOne $1'
|
3048
|
-
- regex: ';
|
3355
|
+
- regex: '; {0,2}(IS11LG)(?: Build|\) AppleWebKit)'
|
3049
3356
|
device_replacement: '$1'
|
3050
3357
|
brand_replacement: 'LG'
|
3051
3358
|
model_replacement: 'Optimus X'
|
3052
|
-
- regex: ';
|
3359
|
+
- regex: '; {0,2}(IS11N)(?: Build|\) AppleWebKit)'
|
3053
3360
|
device_replacement: '$1'
|
3054
3361
|
brand_replacement: 'Medias'
|
3055
3362
|
model_replacement: '$1'
|
3056
|
-
- regex: ';
|
3363
|
+
- regex: '; {0,2}(IS11PT)(?: Build|\) AppleWebKit)'
|
3057
3364
|
device_replacement: '$1'
|
3058
3365
|
brand_replacement: 'Pantech'
|
3059
3366
|
model_replacement: 'MIRACH'
|
3060
|
-
- regex: ';
|
3367
|
+
- regex: '; {0,2}(IS12F)(?: Build|\) AppleWebKit)'
|
3061
3368
|
device_replacement: '$1'
|
3062
3369
|
brand_replacement: 'Fujitsu'
|
3063
3370
|
model_replacement: 'Arrows ES'
|
3064
3371
|
# @ref: https://ja.wikipedia.org/wiki/IS12M
|
3065
|
-
- regex: ';
|
3372
|
+
- regex: '; {0,2}(IS12M)(?: Build|\) AppleWebKit)'
|
3066
3373
|
device_replacement: '$1'
|
3067
3374
|
brand_replacement: 'Motorola'
|
3068
3375
|
model_replacement: 'XT909'
|
3069
|
-
- regex: ';
|
3376
|
+
- regex: '; {0,2}(IS12S)(?: Build|\) AppleWebKit)'
|
3070
3377
|
device_replacement: '$1'
|
3071
3378
|
brand_replacement: 'SonyEricsson'
|
3072
3379
|
model_replacement: 'Xperia Acro HD'
|
3073
|
-
- regex: ';
|
3380
|
+
- regex: '; {0,2}(ISW11F)(?: Build|\) AppleWebKit)'
|
3074
3381
|
device_replacement: '$1'
|
3075
3382
|
brand_replacement: 'Fujitsu'
|
3076
3383
|
model_replacement: 'Arrowz Z'
|
3077
|
-
- regex: ';
|
3384
|
+
- regex: '; {0,2}(ISW11HT)(?: Build|\) AppleWebKit)'
|
3078
3385
|
device_replacement: '$1'
|
3079
3386
|
brand_replacement: 'HTC'
|
3080
3387
|
model_replacement: 'EVO'
|
3081
|
-
- regex: ';
|
3388
|
+
- regex: '; {0,2}(ISW11K)(?: Build|\) AppleWebKit)'
|
3082
3389
|
device_replacement: '$1'
|
3083
3390
|
brand_replacement: 'Kyocera'
|
3084
3391
|
model_replacement: 'DIGNO'
|
3085
|
-
- regex: ';
|
3392
|
+
- regex: '; {0,2}(ISW11M)(?: Build|\) AppleWebKit)'
|
3086
3393
|
device_replacement: '$1'
|
3087
3394
|
brand_replacement: 'Motorola'
|
3088
3395
|
model_replacement: 'Photon'
|
3089
|
-
- regex: ';
|
3396
|
+
- regex: '; {0,2}(ISW11SC)(?: Build|\) AppleWebKit)'
|
3090
3397
|
device_replacement: '$1'
|
3091
3398
|
brand_replacement: 'Samsung'
|
3092
3399
|
model_replacement: 'GALAXY S II WiMAX'
|
3093
|
-
- regex: ';
|
3400
|
+
- regex: '; {0,2}(ISW12HT)(?: Build|\) AppleWebKit)'
|
3094
3401
|
device_replacement: '$1'
|
3095
3402
|
brand_replacement: 'HTC'
|
3096
3403
|
model_replacement: 'EVO 3D'
|
3097
|
-
- regex: ';
|
3404
|
+
- regex: '; {0,2}(ISW13HT)(?: Build|\) AppleWebKit)'
|
3098
3405
|
device_replacement: '$1'
|
3099
3406
|
brand_replacement: 'HTC'
|
3100
3407
|
model_replacement: 'J'
|
3101
|
-
- regex: ';
|
3408
|
+
- regex: '; {0,2}(ISW?[0-9]{2}[A-Z]{0,2})(?: Build|\) AppleWebKit)'
|
3102
3409
|
device_replacement: '$1'
|
3103
3410
|
brand_replacement: 'KDDI'
|
3104
3411
|
model_replacement: '$1'
|
3105
|
-
- regex: ';
|
3412
|
+
- regex: '; {0,2}(INFOBAR [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3106
3413
|
device_replacement: '$1'
|
3107
3414
|
brand_replacement: 'KDDI'
|
3108
3415
|
model_replacement: '$1'
|
@@ -3111,7 +3418,7 @@ device_parsers:
|
|
3111
3418
|
# Kingcom
|
3112
3419
|
# @ref: http://www.e-kingcom.com
|
3113
3420
|
#########
|
3114
|
-
- regex: ';
|
3421
|
+
- regex: '; {0,2}(JOYPAD|Joypad)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3115
3422
|
device_replacement: '$1 $2'
|
3116
3423
|
brand_replacement: 'Kingcom'
|
3117
3424
|
model_replacement: '$1 $2'
|
@@ -3121,7 +3428,7 @@ device_parsers:
|
|
3121
3428
|
# @ref: https://en.wikipedia.org/wiki/Kobo_Inc.
|
3122
3429
|
# @ref: http://www.kobo.com/devices#tablets
|
3123
3430
|
#########
|
3124
|
-
- regex: ';
|
3431
|
+
- regex: '; {0,2}(Vox|VOX|Arc|K080)(?: Build|\) AppleWebKit)'
|
3125
3432
|
regex_flag: 'i'
|
3126
3433
|
device_replacement: '$1'
|
3127
3434
|
brand_replacement: 'Kobo'
|
@@ -3135,7 +3442,7 @@ device_parsers:
|
|
3135
3442
|
# K-Touch
|
3136
3443
|
# @ref: ??
|
3137
3444
|
#########
|
3138
|
-
- regex: ';
|
3445
|
+
- regex: '; {0,2}(K-Touch)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3139
3446
|
regex_flag: 'i'
|
3140
3447
|
device_replacement: '$1 $2'
|
3141
3448
|
brand_replacement: 'Ktouch'
|
@@ -3145,7 +3452,7 @@ device_parsers:
|
|
3145
3452
|
# KT Tech
|
3146
3453
|
# @ref: http://www.kttech.co.kr
|
3147
3454
|
#########
|
3148
|
-
- regex: ';
|
3455
|
+
- regex: '; {0,2}((?:EV|KM)-S\d+[A-Z]?)(?: Build|\) AppleWebKit)'
|
3149
3456
|
regex_flag: 'i'
|
3150
3457
|
device_replacement: '$1'
|
3151
3458
|
brand_replacement: 'KTtech'
|
@@ -3155,7 +3462,7 @@ device_parsers:
|
|
3155
3462
|
# Kyocera
|
3156
3463
|
# @ref: http://www.android.com/devices/?country=all&m=kyocera
|
3157
3464
|
#########
|
3158
|
-
- regex: ';
|
3465
|
+
- 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
3466
|
device_replacement: '$1'
|
3160
3467
|
brand_replacement: 'Kyocera'
|
3161
3468
|
model_replacement: '$1'
|
@@ -3164,12 +3471,12 @@ device_parsers:
|
|
3164
3471
|
# Lava
|
3165
3472
|
# @ref: http://www.lavamobiles.com/
|
3166
3473
|
#########
|
3167
|
-
- regex: ';
|
3474
|
+
- regex: '; {0,2}(?:LAVA[ _]|)IRIS[ _\-]?([^/;\)]+) {0,2}(?:;|\)|Build)'
|
3168
3475
|
regex_flag: 'i'
|
3169
3476
|
device_replacement: 'Iris $1'
|
3170
3477
|
brand_replacement: 'Lava'
|
3171
3478
|
model_replacement: 'Iris $1'
|
3172
|
-
- regex: ';
|
3479
|
+
- regex: '; {0,2}LAVA[ _]([^;/]{1,100}) Build'
|
3173
3480
|
device_replacement: '$1'
|
3174
3481
|
brand_replacement: 'Lava'
|
3175
3482
|
model_replacement: '$1'
|
@@ -3178,7 +3485,7 @@ device_parsers:
|
|
3178
3485
|
# Lemon
|
3179
3486
|
# @ref: http://www.lemonmobiles.com/products.php?type=1
|
3180
3487
|
#########
|
3181
|
-
- regex: ';
|
3488
|
+
- regex: '; {0,2}(?:(Aspire A1)|(?:LEMON|Lemon)[ _]([^;/]{1,100}))_?(?: Build|\) AppleWebKit)'
|
3182
3489
|
device_replacement: 'Lemon $1$2'
|
3183
3490
|
brand_replacement: 'Lemon'
|
3184
3491
|
model_replacement: '$1$2'
|
@@ -3187,11 +3494,11 @@ device_parsers:
|
|
3187
3494
|
# Lenco
|
3188
3495
|
# @ref: http://www.lenco.com/c/tablets/
|
3189
3496
|
#########
|
3190
|
-
- regex: ';
|
3497
|
+
- regex: '; {0,2}(TAB-1012)(?: Build|\) AppleWebKit)'
|
3191
3498
|
device_replacement: 'Lenco $1'
|
3192
3499
|
brand_replacement: 'Lenco'
|
3193
3500
|
model_replacement: '$1'
|
3194
|
-
- regex: '; Lenco ([^;/]
|
3501
|
+
- regex: '; Lenco ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3195
3502
|
device_replacement: 'Lenco $1'
|
3196
3503
|
brand_replacement: 'Lenco'
|
3197
3504
|
model_replacement: '$1'
|
@@ -3200,23 +3507,23 @@ device_parsers:
|
|
3200
3507
|
# Lenovo
|
3201
3508
|
# @ref: http://support.lenovo.com/en_GB/downloads/default.page?#
|
3202
3509
|
#########
|
3203
|
-
- regex: ';
|
3510
|
+
- regex: '; {0,2}(A1_07|A2107A-H|S2005A-H|S1-37AH0) Build'
|
3204
3511
|
device_replacement: '$1'
|
3205
3512
|
brand_replacement: 'Lenovo'
|
3206
3513
|
model_replacement: '$1'
|
3207
|
-
- regex: ';
|
3514
|
+
- regex: '; {0,2}(Idea[Tp]ab)[ _]([^;/]{1,100});? Build'
|
3208
3515
|
device_replacement: 'Lenovo $1 $2'
|
3209
3516
|
brand_replacement: 'Lenovo'
|
3210
3517
|
model_replacement: '$1 $2'
|
3211
|
-
- regex: ';
|
3518
|
+
- regex: '; {0,2}(Idea(?:Tab|pad)) ?([^;/]{1,100}) Build'
|
3212
3519
|
device_replacement: 'Lenovo $1 $2'
|
3213
3520
|
brand_replacement: 'Lenovo'
|
3214
3521
|
model_replacement: '$1 $2'
|
3215
|
-
- regex: ';
|
3522
|
+
- regex: '; {0,2}(ThinkPad) ?(Tablet) Build/'
|
3216
3523
|
device_replacement: 'Lenovo $1 $2'
|
3217
3524
|
brand_replacement: 'Lenovo'
|
3218
3525
|
model_replacement: '$1 $2'
|
3219
|
-
- regex: ';
|
3526
|
+
- regex: '; {0,2}(?:LNV-|)(?:=?[Ll]enovo[ _\-]?|LENOVO[ _])(.{1,200}?)(?:Build|[;/\)])'
|
3220
3527
|
device_replacement: 'Lenovo $1'
|
3221
3528
|
brand_replacement: 'Lenovo'
|
3222
3529
|
model_replacement: '$1'
|
@@ -3224,11 +3531,11 @@ device_parsers:
|
|
3224
3531
|
device_replacement: 'Lenovo $1 $2 $3'
|
3225
3532
|
brand_replacement: 'Lenovo'
|
3226
3533
|
model_replacement: '$1 $2 $3'
|
3227
|
-
- regex: ';
|
3534
|
+
- regex: '; {0,2}(?:Ideapad |)K1 Build/'
|
3228
3535
|
device_replacement: 'Lenovo Ideapad K1'
|
3229
3536
|
brand_replacement: 'Lenovo'
|
3230
3537
|
model_replacement: 'Ideapad K1'
|
3231
|
-
- regex: ';
|
3538
|
+
- regex: '; {0,2}(3GC101|3GW10[01]|A390) Build/'
|
3232
3539
|
device_replacement: '$1'
|
3233
3540
|
brand_replacement: 'Lenovo'
|
3234
3541
|
model_replacement: '$1'
|
@@ -3241,7 +3548,7 @@ device_parsers:
|
|
3241
3548
|
# Lexibook
|
3242
3549
|
# @ref: http://www.lexibook.com/fr
|
3243
3550
|
#########
|
3244
|
-
- regex: ';
|
3551
|
+
- regex: '; {0,2}(MFC\d+)[A-Z]{2}([^;,/]*),?(?: Build|\) AppleWebKit)'
|
3245
3552
|
device_replacement: '$1$2'
|
3246
3553
|
brand_replacement: 'Lexibook'
|
3247
3554
|
model_replacement: '$1$2'
|
@@ -3250,23 +3557,23 @@ device_parsers:
|
|
3250
3557
|
# LG
|
3251
3558
|
# @ref: http://www.lg.com/uk/mobile
|
3252
3559
|
#########
|
3253
|
-
- regex: ';
|
3560
|
+
- 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
3561
|
device_replacement: '$1'
|
3255
3562
|
brand_replacement: 'LG'
|
3256
3563
|
model_replacement: '$1'
|
3257
|
-
- regex: '[;:]
|
3564
|
+
- regex: '[;:] {0,2}(L-\d+[A-Z]|LGL\d+[A-Z]?)(?:/V\d+|) {0,2}(?:Build|[;\)])'
|
3258
3565
|
device_replacement: '$1'
|
3259
3566
|
brand_replacement: 'LG'
|
3260
3567
|
model_replacement: '$1'
|
3261
|
-
- regex: ';
|
3568
|
+
- regex: '; {0,2}(LG-)([A-Z]{1,2}\d{2,}[^,;/\)\(]*?)(?:Build| V\d+|[,;/\)\(]|$)'
|
3262
3569
|
device_replacement: '$1$2'
|
3263
3570
|
brand_replacement: 'LG'
|
3264
3571
|
model_replacement: '$2'
|
3265
|
-
- regex: ';
|
3572
|
+
- regex: '; {0,2}(LG[ \-]|LG)([^;/]{1,100})[;/]? Build'
|
3266
3573
|
device_replacement: '$1$2'
|
3267
3574
|
brand_replacement: 'LG'
|
3268
3575
|
model_replacement: '$2'
|
3269
|
-
- regex: '^(LG)-([^;/]
|
3576
|
+
- regex: '^(LG)-([^;/]{1,100})/ Mozilla/.{0,200}; Android'
|
3270
3577
|
device_replacement: '$1 $2'
|
3271
3578
|
brand_replacement: 'LG'
|
3272
3579
|
model_replacement: '$2'
|
@@ -3279,11 +3586,11 @@ device_parsers:
|
|
3279
3586
|
# Malata
|
3280
3587
|
# @ref: http://www.malata.com/en/products.aspx?classid=680
|
3281
3588
|
#########
|
3282
|
-
- regex: ';
|
3589
|
+
- regex: '; {0,2}((?:SMB|smb)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3283
3590
|
device_replacement: '$1'
|
3284
3591
|
brand_replacement: 'Malata'
|
3285
3592
|
model_replacement: '$1'
|
3286
|
-
- regex: ';
|
3593
|
+
- regex: '; {0,2}(?:Malata|MALATA) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3287
3594
|
device_replacement: '$1'
|
3288
3595
|
brand_replacement: 'Malata'
|
3289
3596
|
model_replacement: '$1'
|
@@ -3292,7 +3599,7 @@ device_parsers:
|
|
3292
3599
|
# Manta
|
3293
3600
|
# @ref: http://www.manta.com.pl/en
|
3294
3601
|
#########
|
3295
|
-
- regex: ';
|
3602
|
+
- 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
3603
|
device_replacement: '$1'
|
3297
3604
|
brand_replacement: 'Manta'
|
3298
3605
|
model_replacement: '$1'
|
@@ -3301,7 +3608,7 @@ device_parsers:
|
|
3301
3608
|
# Match
|
3302
3609
|
# @ref: http://www.match.net.cn/products.asp
|
3303
3610
|
#########
|
3304
|
-
- regex: ';
|
3611
|
+
- 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
3612
|
device_replacement: '$1'
|
3306
3613
|
brand_replacement: 'Match'
|
3307
3614
|
model_replacement: '$1'
|
@@ -3315,7 +3622,7 @@ device_parsers:
|
|
3315
3622
|
# Maxx MT150, Maxx MQ601, Maxx M2020, Maxx Sleek MX463neo, Maxx MX525, Maxx MX192-Tune, Maxx Genx Droid 7 AX353,
|
3316
3623
|
# @note: Need more User-Agents!!!
|
3317
3624
|
#########
|
3318
|
-
- regex: ';
|
3625
|
+
- regex: '; {0,2}(GenxDroid7|MSD7.{0,200}?|AX\d.{0,200}?|Tab 701|Tab 722)(?: Build|\) AppleWebKit)'
|
3319
3626
|
device_replacement: 'Maxx $1'
|
3320
3627
|
brand_replacement: 'Maxx'
|
3321
3628
|
model_replacement: '$1'
|
@@ -3324,11 +3631,11 @@ device_parsers:
|
|
3324
3631
|
# Mediacom
|
3325
3632
|
# @ref: http://www.mediacomeurope.it/
|
3326
3633
|
#########
|
3327
|
-
- regex: ';
|
3634
|
+
- regex: '; {0,2}(M-PP[^;/]{1,30}|PhonePad ?\d{2,}[^;/]{1,30}?)(?: Build|\) AppleWebKit)'
|
3328
3635
|
device_replacement: 'Mediacom $1'
|
3329
3636
|
brand_replacement: 'Mediacom'
|
3330
3637
|
model_replacement: '$1'
|
3331
|
-
- regex: ';
|
3638
|
+
- regex: '; {0,2}(M-MP[^;/]{1,30}|SmartPad ?\d{2,}[^;/]{1,30}?)(?: Build|\) AppleWebKit)'
|
3332
3639
|
device_replacement: 'Mediacom $1'
|
3333
3640
|
brand_replacement: 'Mediacom'
|
3334
3641
|
model_replacement: '$1'
|
@@ -3337,12 +3644,12 @@ device_parsers:
|
|
3337
3644
|
# Medion
|
3338
3645
|
# @ref: http://www.medion.com/en/
|
3339
3646
|
#########
|
3340
|
-
- regex: ';
|
3647
|
+
- regex: '; {0,2}(?:MD_|)LIFETAB[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3341
3648
|
regex_flag: 'i'
|
3342
3649
|
device_replacement: 'Medion Lifetab $1'
|
3343
3650
|
brand_replacement: 'Medion'
|
3344
3651
|
model_replacement: 'Lifetab $1'
|
3345
|
-
- regex: ';
|
3652
|
+
- regex: '; {0,2}MEDION ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3346
3653
|
device_replacement: 'Medion $1'
|
3347
3654
|
brand_replacement: 'Medion'
|
3348
3655
|
model_replacement: '$1'
|
@@ -3351,41 +3658,65 @@ device_parsers:
|
|
3351
3658
|
# Meizu
|
3352
3659
|
# @ref: http://www.meizu.com
|
3353
3660
|
#########
|
3354
|
-
- regex: ';
|
3661
|
+
- regex: '; {0,2}(M030|M031|M035|M040|M065|m9)(?: Build|\) AppleWebKit)'
|
3355
3662
|
device_replacement: 'Meizu $1'
|
3356
3663
|
brand_replacement: 'Meizu'
|
3357
3664
|
model_replacement: '$1'
|
3358
|
-
- regex: ';
|
3665
|
+
- regex: '; {0,2}(?:meizu_|MEIZU )(.{1,200}?) {0,2}(?:Build|[;\)])'
|
3359
3666
|
device_replacement: 'Meizu $1'
|
3360
3667
|
brand_replacement: 'Meizu'
|
3361
3668
|
model_replacement: '$1'
|
3362
3669
|
|
3670
|
+
#########
|
3671
|
+
# Meta
|
3672
|
+
# @ref: https://www.meta.com
|
3673
|
+
#########
|
3674
|
+
- regex: 'Quest 3'
|
3675
|
+
device_replacement: 'Quest'
|
3676
|
+
brand_replacement: 'Meta'
|
3677
|
+
model_replacement: 'Quest 3'
|
3678
|
+
|
3679
|
+
- regex: 'Quest 2'
|
3680
|
+
device_replacement: 'Quest'
|
3681
|
+
brand_replacement: 'Meta'
|
3682
|
+
model_replacement: 'Quest 2'
|
3683
|
+
|
3684
|
+
- regex: 'Quest Pro'
|
3685
|
+
device_replacement: 'Quest'
|
3686
|
+
brand_replacement: 'Meta'
|
3687
|
+
model_replacement: 'Quest Pro'
|
3688
|
+
|
3689
|
+
- regex: 'Quest'
|
3690
|
+
device_replacement: 'Quest'
|
3691
|
+
brand_replacement: 'Meta'
|
3692
|
+
model_replacement: 'Quest'
|
3693
|
+
|
3363
3694
|
#########
|
3364
3695
|
# Micromax
|
3365
3696
|
# @ref: http://www.micromaxinfo.com
|
3366
3697
|
#########
|
3367
|
-
- regex: ';
|
3698
|
+
- regex: '; {0,2}(?:Micromax[ _](A111|A240)|(A111|A240)) Build'
|
3368
3699
|
regex_flag: 'i'
|
3369
3700
|
device_replacement: 'Micromax $1$2'
|
3370
3701
|
brand_replacement: 'Micromax'
|
3371
3702
|
model_replacement: '$1$2'
|
3372
|
-
- regex: ';
|
3703
|
+
- regex: '; {0,2}Micromax[ _](A\d{2,3}[^;/]*) Build'
|
3373
3704
|
regex_flag: 'i'
|
3374
3705
|
device_replacement: 'Micromax $1'
|
3375
3706
|
brand_replacement: 'Micromax'
|
3376
3707
|
model_replacement: '$1'
|
3377
3708
|
# be carefull here with Acer e.g. A500
|
3378
|
-
- regex: ';
|
3709
|
+
- regex: '; {0,2}(A\d{2}|A[12]\d{2}|A90S|A110Q) Build'
|
3379
3710
|
regex_flag: 'i'
|
3380
3711
|
device_replacement: 'Micromax $1'
|
3381
3712
|
brand_replacement: 'Micromax'
|
3382
3713
|
model_replacement: '$1'
|
3383
|
-
- regex: ';
|
3714
|
+
- regex: '; {0,2}Micromax[ _](P\d{3}[^;/]*) Build'
|
3384
3715
|
regex_flag: 'i'
|
3385
3716
|
device_replacement: 'Micromax $1'
|
3386
3717
|
brand_replacement: 'Micromax'
|
3387
3718
|
model_replacement: '$1'
|
3388
|
-
- regex: ';
|
3719
|
+
- regex: '; {0,2}(P\d{3}|P\d{3}\(Funbook\)) Build'
|
3389
3720
|
regex_flag: 'i'
|
3390
3721
|
device_replacement: 'Micromax $1'
|
3391
3722
|
brand_replacement: 'Micromax'
|
@@ -3395,7 +3726,7 @@ device_parsers:
|
|
3395
3726
|
# Mito
|
3396
3727
|
# @ref: http://new.mitomobile.com/
|
3397
3728
|
#########
|
3398
|
-
- regex: ';
|
3729
|
+
- regex: '; {0,2}(MITO)[ _\-]?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3399
3730
|
regex_flag: 'i'
|
3400
3731
|
device_replacement: '$1 $2'
|
3401
3732
|
brand_replacement: 'Mito'
|
@@ -3405,7 +3736,7 @@ device_parsers:
|
|
3405
3736
|
# Mobistel
|
3406
3737
|
# @ref: http://www.mobistel.com/
|
3407
3738
|
#########
|
3408
|
-
- regex: ';
|
3739
|
+
- regex: '; {0,2}(Cynus)[ _](F5|T\d|.{1,200}?) {0,2}(?:Build|[;/\)])'
|
3409
3740
|
regex_flag: 'i'
|
3410
3741
|
device_replacement: '$1 $2'
|
3411
3742
|
brand_replacement: 'Mobistel'
|
@@ -3415,12 +3746,12 @@ device_parsers:
|
|
3415
3746
|
# Modecom
|
3416
3747
|
# @ref: http://www.modecom.eu/tablets/portal/
|
3417
3748
|
#########
|
3418
|
-
- regex: ';
|
3749
|
+
- regex: '; {0,2}(MODECOM |)(FreeTab) ?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3419
3750
|
regex_flag: 'i'
|
3420
3751
|
device_replacement: '$1$2 $3'
|
3421
3752
|
brand_replacement: 'Modecom'
|
3422
3753
|
model_replacement: '$2 $3'
|
3423
|
-
- regex: ';
|
3754
|
+
- regex: '; {0,2}(MODECOM )([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3424
3755
|
regex_flag: 'i'
|
3425
3756
|
device_replacement: '$1 $2'
|
3426
3757
|
brand_replacement: 'Modecom'
|
@@ -3430,32 +3761,32 @@ device_parsers:
|
|
3430
3761
|
# Motorola
|
3431
3762
|
# @ref: http://www.motorola.com/us/shop-all-mobile-phones/
|
3432
3763
|
#########
|
3433
|
-
- regex: ';
|
3764
|
+
- regex: '; {0,2}(MZ\d{3}\+?|MZ\d{3} 4G|Xoom|XOOM[^;/]*) Build'
|
3434
3765
|
device_replacement: 'Motorola $1'
|
3435
3766
|
brand_replacement: 'Motorola'
|
3436
3767
|
model_replacement: '$1'
|
3437
|
-
- regex: ';
|
3768
|
+
- regex: '; {0,2}(Milestone )(XT[^;/]*) Build'
|
3438
3769
|
device_replacement: 'Motorola $1$2'
|
3439
3770
|
brand_replacement: 'Motorola'
|
3440
3771
|
model_replacement: '$2'
|
3441
|
-
- regex: ';
|
3772
|
+
- regex: '; {0,2}(Motoroi ?x|Droid X|DROIDX) Build'
|
3442
3773
|
regex_flag: 'i'
|
3443
3774
|
device_replacement: 'Motorola $1'
|
3444
3775
|
brand_replacement: 'Motorola'
|
3445
3776
|
model_replacement: 'DROID X'
|
3446
|
-
- regex: ';
|
3777
|
+
- regex: '; {0,2}(Droid[^;/]*|DROID[^;/]*|Milestone[^;/]*|Photon|Triumph|Devour|Titanium) Build'
|
3447
3778
|
device_replacement: 'Motorola $1'
|
3448
3779
|
brand_replacement: 'Motorola'
|
3449
3780
|
model_replacement: '$1'
|
3450
|
-
- regex: ';
|
3781
|
+
- 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
3782
|
device_replacement: '$1'
|
3452
3783
|
brand_replacement: 'Motorola'
|
3453
3784
|
model_replacement: '$1'
|
3454
|
-
- regex: ';
|
3785
|
+
- regex: '; {0,2}(Motorola MOT-|Motorola[ _\-]|MOT\-?)([^;/]{1,100}) Build'
|
3455
3786
|
device_replacement: '$1$2'
|
3456
3787
|
brand_replacement: 'Motorola'
|
3457
3788
|
model_replacement: '$2'
|
3458
|
-
- regex: ';
|
3789
|
+
- regex: '; {0,2}(Moto[_ ]?|MOT\-)([^;/]{1,100}) Build'
|
3459
3790
|
device_replacement: '$1$2'
|
3460
3791
|
brand_replacement: 'Motorola'
|
3461
3792
|
model_replacement: '$2'
|
@@ -3464,7 +3795,7 @@ device_parsers:
|
|
3464
3795
|
# MpMan
|
3465
3796
|
# @ref: http://www.mpmaneurope.com
|
3466
3797
|
#########
|
3467
|
-
- regex: ';
|
3798
|
+
- 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
3799
|
device_replacement: '$1'
|
3469
3800
|
brand_replacement: 'Mpman'
|
3470
3801
|
model_replacement: '$1'
|
@@ -3473,7 +3804,7 @@ device_parsers:
|
|
3473
3804
|
# MSI
|
3474
3805
|
# @ref: http://www.msi.com/product/windpad/
|
3475
3806
|
#########
|
3476
|
-
- regex: ';
|
3807
|
+
- regex: '; {0,2}(?:MSI[ _]|)(Primo\d+|Enjoy[ _\-][^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3477
3808
|
regex_flag: 'i'
|
3478
3809
|
device_replacement: '$1'
|
3479
3810
|
brand_replacement: 'Msi'
|
@@ -3483,7 +3814,7 @@ device_parsers:
|
|
3483
3814
|
# Multilaser
|
3484
3815
|
# http://www.multilaser.com.br/listagem_produtos.php?cat=5
|
3485
3816
|
#########
|
3486
|
-
- regex: ';
|
3817
|
+
- regex: '; {0,2}Multilaser[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3487
3818
|
device_replacement: '$1'
|
3488
3819
|
brand_replacement: 'Multilaser'
|
3489
3820
|
model_replacement: '$1'
|
@@ -3492,15 +3823,15 @@ device_parsers:
|
|
3492
3823
|
# MyPhone
|
3493
3824
|
# @ref: http://myphone.com.ph/
|
3494
3825
|
#########
|
3495
|
-
- regex: ';
|
3826
|
+
- regex: '; {0,2}(My)[_]?(Pad)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3496
3827
|
device_replacement: '$1$2 $3'
|
3497
3828
|
brand_replacement: 'MyPhone'
|
3498
3829
|
model_replacement: '$1$2 $3'
|
3499
|
-
- regex: ';
|
3830
|
+
- regex: '; {0,2}(My)\|?(Phone)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3500
3831
|
device_replacement: '$1$2 $3'
|
3501
3832
|
brand_replacement: 'MyPhone'
|
3502
3833
|
model_replacement: '$3'
|
3503
|
-
- regex: ';
|
3834
|
+
- regex: '; {0,2}(A\d+)[ _](Duo|)(?: Build|\) AppleWebKit)'
|
3504
3835
|
regex_flag: 'i'
|
3505
3836
|
device_replacement: '$1 $2'
|
3506
3837
|
brand_replacement: 'MyPhone'
|
@@ -3510,7 +3841,7 @@ device_parsers:
|
|
3510
3841
|
# Mytab
|
3511
3842
|
# @ref: http://www.mytab.eu/en/category/mytab-products/
|
3512
3843
|
#########
|
3513
|
-
- regex: ';
|
3844
|
+
- regex: '; {0,2}(myTab[^;/]*)(?: Build|\) AppleWebKit)'
|
3514
3845
|
device_replacement: '$1'
|
3515
3846
|
brand_replacement: 'Mytab'
|
3516
3847
|
model_replacement: '$1'
|
@@ -3519,7 +3850,7 @@ device_parsers:
|
|
3519
3850
|
# Nabi
|
3520
3851
|
# @ref: https://www.nabitablet.com
|
3521
3852
|
#########
|
3522
|
-
- regex: ';
|
3853
|
+
- regex: '; {0,2}(NABI2?-)([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3523
3854
|
device_replacement: '$1$2'
|
3524
3855
|
brand_replacement: 'Nabi'
|
3525
3856
|
model_replacement: '$2'
|
@@ -3528,15 +3859,15 @@ device_parsers:
|
|
3528
3859
|
# Nec Medias
|
3529
3860
|
# @ref: http://www.n-keitai.com/
|
3530
3861
|
#########
|
3531
|
-
- regex: ';
|
3862
|
+
- regex: '; {0,2}(N-\d+[CDE])(?: Build|\) AppleWebKit)'
|
3532
3863
|
device_replacement: '$1'
|
3533
3864
|
brand_replacement: 'Nec'
|
3534
3865
|
model_replacement: '$1'
|
3535
|
-
- regex: '; ?(NEC-)(
|
3866
|
+
- regex: '; ?(NEC-)(.{0,200}?)(?: Build|\) AppleWebKit)'
|
3536
3867
|
device_replacement: '$1$2'
|
3537
3868
|
brand_replacement: 'Nec'
|
3538
3869
|
model_replacement: '$2'
|
3539
|
-
- regex: ';
|
3870
|
+
- regex: '; {0,2}(LT-NA7)(?: Build|\) AppleWebKit)'
|
3540
3871
|
device_replacement: '$1'
|
3541
3872
|
brand_replacement: 'Nec'
|
3542
3873
|
model_replacement: 'Lifetouch Note'
|
@@ -3545,7 +3876,7 @@ device_parsers:
|
|
3545
3876
|
# Nextbook
|
3546
3877
|
# @ref: http://nextbookusa.com
|
3547
3878
|
#########
|
3548
|
-
- regex: ';
|
3879
|
+
- 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
3880
|
device_replacement: '$1'
|
3550
3881
|
brand_replacement: 'Nextbook'
|
3551
3882
|
model_replacement: '$1'
|
@@ -3554,12 +3885,12 @@ device_parsers:
|
|
3554
3885
|
# Nokia
|
3555
3886
|
# @ref: http://www.nokia.com
|
3556
3887
|
#########
|
3557
|
-
- regex: ';
|
3888
|
+
- regex: '; {0,2}(Nokia)([ _\-]{0,5})([^;/]{0,50}) Build'
|
3558
3889
|
regex_flag: 'i'
|
3559
3890
|
device_replacement: '$1$2$3'
|
3560
3891
|
brand_replacement: 'Nokia'
|
3561
3892
|
model_replacement: '$3'
|
3562
|
-
- regex: ';
|
3893
|
+
- regex: '; {0,2}(TA\-\d{4})(?: Build|\) AppleWebKit)'
|
3563
3894
|
device_replacement: 'Nokia $1'
|
3564
3895
|
brand_replacement: 'Nokia'
|
3565
3896
|
model_replacement: '$1'
|
@@ -3569,11 +3900,11 @@ device_parsers:
|
|
3569
3900
|
# @ref:
|
3570
3901
|
# TODO nook browser/1.0
|
3571
3902
|
#########
|
3572
|
-
- regex: ';
|
3903
|
+
- regex: '; {0,2}(Nook ?|Barnes & Noble Nook |BN )([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3573
3904
|
device_replacement: '$1$2'
|
3574
3905
|
brand_replacement: 'Nook'
|
3575
3906
|
model_replacement: '$2'
|
3576
|
-
- regex: ';
|
3907
|
+
- regex: '; {0,2}(NOOK |)(BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2)(?: Build|\) AppleWebKit)'
|
3577
3908
|
device_replacement: '$1$2'
|
3578
3909
|
brand_replacement: 'Nook'
|
3579
3910
|
model_replacement: '$2'
|
@@ -3586,7 +3917,7 @@ device_parsers:
|
|
3586
3917
|
# Olivetti
|
3587
3918
|
# @ref: http://www.olivetti.de/EN/Page/t02/view_html?idp=348
|
3588
3919
|
#########
|
3589
|
-
- regex: ';
|
3920
|
+
- regex: '; {0,2}(OP110|OliPad[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3590
3921
|
device_replacement: 'Olivetti $1'
|
3591
3922
|
brand_replacement: 'Olivetti'
|
3592
3923
|
model_replacement: '$1'
|
@@ -3597,7 +3928,7 @@ device_parsers:
|
|
3597
3928
|
# @note: MID tablets might get matched by CobyKyros first
|
3598
3929
|
# @models: (T107|MID(?:700[2-5]|7031|7108|7132|750[02]|8001|8500|9001|971[12])
|
3599
3930
|
#########
|
3600
|
-
- regex: ';
|
3931
|
+
- regex: '; {0,2}OMEGA[ _\-](MID[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3601
3932
|
device_replacement: 'Omega $1'
|
3602
3933
|
brand_replacement: 'Omega'
|
3603
3934
|
model_replacement: '$1'
|
@@ -3610,7 +3941,7 @@ device_parsers:
|
|
3610
3941
|
# OpenPeak
|
3611
3942
|
# @ref: https://support.google.com/googleplay/answer/1727131?hl=en
|
3612
3943
|
#########
|
3613
|
-
- regex: ';
|
3944
|
+
- regex: '; {0,2}((?:CIUS|cius)[^;/]*)(?: Build|\) AppleWebKit)'
|
3614
3945
|
device_replacement: 'Openpeak $1'
|
3615
3946
|
brand_replacement: 'Openpeak'
|
3616
3947
|
model_replacement: '$1'
|
@@ -3619,18 +3950,18 @@ device_parsers:
|
|
3619
3950
|
# Oppo
|
3620
3951
|
# @ref: http://en.oppo.com/products/
|
3621
3952
|
#########
|
3622
|
-
- regex: ';
|
3953
|
+
- 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
3954
|
device_replacement: 'Oppo $1'
|
3624
3955
|
brand_replacement: 'Oppo'
|
3625
3956
|
model_replacement: '$1'
|
3626
|
-
- regex: ';
|
3957
|
+
- regex: '; {0,2}OPPO ?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3627
3958
|
device_replacement: 'Oppo $1'
|
3628
3959
|
brand_replacement: 'Oppo'
|
3629
3960
|
model_replacement: '$1'
|
3630
|
-
- regex: ';
|
3961
|
+
- regex: '; {0,2}(CPH\d{1,4}|RMX\d{1,4}|P[A-Z]{3}\d{2})(?: Build|\) AppleWebKit)'
|
3631
3962
|
device_replacement: 'Oppo $1'
|
3632
3963
|
brand_replacement: 'Oppo'
|
3633
|
-
- regex: ';
|
3964
|
+
- regex: '; {0,2}(A1601)(?: Build|\) AppleWebKit)'
|
3634
3965
|
device_replacement: 'Oppo F1s'
|
3635
3966
|
brand_replacement: 'Oppo'
|
3636
3967
|
model_replacement: '$1'
|
@@ -3639,20 +3970,20 @@ device_parsers:
|
|
3639
3970
|
# Odys
|
3640
3971
|
# @ref: http://odys.de
|
3641
3972
|
#########
|
3642
|
-
- regex: ';
|
3973
|
+
- regex: '; {0,2}(?:Odys\-|ODYS\-|ODYS )([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3643
3974
|
device_replacement: 'Odys $1'
|
3644
3975
|
brand_replacement: 'Odys'
|
3645
3976
|
model_replacement: '$1'
|
3646
|
-
- regex: ';
|
3977
|
+
- regex: '; {0,2}(SELECT) ?(7)(?: Build|\) AppleWebKit)'
|
3647
3978
|
device_replacement: 'Odys $1 $2'
|
3648
3979
|
brand_replacement: 'Odys'
|
3649
3980
|
model_replacement: '$1 $2'
|
3650
|
-
- regex: ';
|
3981
|
+
- regex: '; {0,2}(PEDI)_(PLUS)_(W)(?: Build|\) AppleWebKit)'
|
3651
3982
|
device_replacement: 'Odys $1 $2 $3'
|
3652
3983
|
brand_replacement: 'Odys'
|
3653
3984
|
model_replacement: '$1 $2 $3'
|
3654
3985
|
# Weltbild - Tablet PC 4 = Cat Phoenix = Odys Tablet PC 4?
|
3655
|
-
- regex: ';
|
3986
|
+
- 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
3987
|
device_replacement: 'Odys $1'
|
3657
3988
|
brand_replacement: 'Odys'
|
3658
3989
|
model_replacement: '$1'
|
@@ -3669,12 +4000,24 @@ device_parsers:
|
|
3669
4000
|
device_replacement: 'OnePlus $1'
|
3670
4001
|
brand_replacement: 'OnePlus'
|
3671
4002
|
model_replacement: '$1'
|
4003
|
+
- 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)'
|
4004
|
+
device_replacement: 'OnePlus $1'
|
4005
|
+
brand_replacement: 'OnePlus'
|
4006
|
+
model_replacement: 'OnePlus $1'
|
4007
|
+
- regex: '; (OnePlus[ a-zA-z0-9]{0,50});((?: Build|.{0,50}\) AppleWebKit))'
|
4008
|
+
device_replacement: '$1'
|
4009
|
+
brand_replacement: 'OnePlus'
|
4010
|
+
model_replacement: '$1'
|
4011
|
+
- regex: '; (OnePlus[ a-zA-z0-9]{0,50})((?: Build|\) AppleWebKit))'
|
4012
|
+
device_replacement: '$1'
|
4013
|
+
brand_replacement: 'OnePlus'
|
4014
|
+
model_replacement: '$1'
|
3672
4015
|
|
3673
4016
|
#########
|
3674
4017
|
# Orion
|
3675
4018
|
# @ref: http://www.orion.ua/en/products/computer-products/tablet-pcs.html
|
3676
4019
|
#########
|
3677
|
-
- regex: ';
|
4020
|
+
- regex: '; {0,2}(TP-\d+)(?: Build|\) AppleWebKit)'
|
3678
4021
|
device_replacement: 'Orion $1'
|
3679
4022
|
brand_replacement: 'Orion'
|
3680
4023
|
model_replacement: '$1'
|
@@ -3683,7 +4026,7 @@ device_parsers:
|
|
3683
4026
|
# PackardBell
|
3684
4027
|
# @ref: http://www.packardbell.com/pb/en/AE/content/productgroup/tablets
|
3685
4028
|
#########
|
3686
|
-
- regex: ';
|
4029
|
+
- regex: '; {0,2}(G100W?)(?: Build|\) AppleWebKit)'
|
3687
4030
|
device_replacement: 'PackardBell $1'
|
3688
4031
|
brand_replacement: 'PackardBell'
|
3689
4032
|
model_replacement: '$1'
|
@@ -3694,17 +4037,17 @@ device_parsers:
|
|
3694
4037
|
# @models: T11, T21, T31, P11, P51, Eluga Power, Eluga DL1
|
3695
4038
|
# @models: (tab) Toughpad FZ-A1, Toughpad JT-B1
|
3696
4039
|
#########
|
3697
|
-
- regex: ';
|
4040
|
+
- regex: '; {0,2}(Panasonic)[_ ]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3698
4041
|
device_replacement: '$1 $2'
|
3699
4042
|
brand_replacement: '$1'
|
3700
4043
|
model_replacement: '$2'
|
3701
4044
|
# Toughpad
|
3702
|
-
- regex: ';
|
4045
|
+
- regex: '; {0,2}(FZ-A1B|JT-B1)(?: Build|\) AppleWebKit)'
|
3703
4046
|
device_replacement: 'Panasonic $1'
|
3704
4047
|
brand_replacement: 'Panasonic'
|
3705
4048
|
model_replacement: '$1'
|
3706
4049
|
# Eluga Power
|
3707
|
-
- regex: ';
|
4050
|
+
- regex: '; {0,2}(dL1|DL1)(?: Build|\) AppleWebKit)'
|
3708
4051
|
device_replacement: 'Panasonic $1'
|
3709
4052
|
brand_replacement: 'Panasonic'
|
3710
4053
|
model_replacement: '$1'
|
@@ -3715,15 +4058,15 @@ device_parsers:
|
|
3715
4058
|
# @href: http://www.pantech.co.kr/en/prod/prodList.do?gbrand=VEGA
|
3716
4059
|
# @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
4060
|
#########
|
3718
|
-
- regex: ';
|
4061
|
+
- regex: '; {0,2}(SKY[ _]|)(IM\-[AT]\d{3}[^;/]{1,100}).{0,30} Build/'
|
3719
4062
|
device_replacement: 'Pantech $1$2'
|
3720
4063
|
brand_replacement: 'Pantech'
|
3721
4064
|
model_replacement: '$1$2'
|
3722
|
-
- regex: ';
|
4065
|
+
- regex: '; {0,2}((?:ADR8995|ADR910L|ADR930L|ADR930VW|PTL21|P8000)(?: 4G|)) Build/'
|
3723
4066
|
device_replacement: '$1'
|
3724
4067
|
brand_replacement: 'Pantech'
|
3725
4068
|
model_replacement: '$1'
|
3726
|
-
- regex: ';
|
4069
|
+
- regex: '; {0,2}Pantech([^;/]{1,30}).{0,200}? Build/'
|
3727
4070
|
device_replacement: 'Pantech $1'
|
3728
4071
|
brand_replacement: 'Pantech'
|
3729
4072
|
model_replacement: '$1'
|
@@ -3732,7 +4075,7 @@ device_parsers:
|
|
3732
4075
|
# Papayre
|
3733
4076
|
# @ref: http://grammata.es/
|
3734
4077
|
#########
|
3735
|
-
- regex: ';
|
4078
|
+
- regex: '; {0,2}(papyre)[ _\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3736
4079
|
regex_flag: 'i'
|
3737
4080
|
device_replacement: '$1 $2'
|
3738
4081
|
brand_replacement: 'Papyre'
|
@@ -3742,7 +4085,7 @@ device_parsers:
|
|
3742
4085
|
# Pearl
|
3743
4086
|
# @ref: http://www.pearl.de/c-1540.shtml
|
3744
4087
|
#########
|
3745
|
-
- regex: ';
|
4088
|
+
- regex: '; {0,2}(?:Touchlet )?(X10\.[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3746
4089
|
device_replacement: 'Pearl $1'
|
3747
4090
|
brand_replacement: 'Pearl'
|
3748
4091
|
model_replacement: '$1'
|
@@ -3755,11 +4098,11 @@ device_parsers:
|
|
3755
4098
|
device_replacement: 'Phicomm $1'
|
3756
4099
|
brand_replacement: 'Phicomm'
|
3757
4100
|
model_replacement: '$1'
|
3758
|
-
- regex: '; PHICOMM ([^;/]
|
4101
|
+
- regex: '; PHICOMM ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3759
4102
|
device_replacement: 'Phicomm $1'
|
3760
4103
|
brand_replacement: 'Phicomm'
|
3761
4104
|
model_replacement: '$1'
|
3762
|
-
- regex: ';
|
4105
|
+
- regex: '; {0,2}(FWS\d{3}[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3763
4106
|
device_replacement: 'Phicomm $1'
|
3764
4107
|
brand_replacement: 'Phicomm'
|
3765
4108
|
model_replacement: '$1'
|
@@ -3771,11 +4114,11 @@ device_parsers:
|
|
3771
4114
|
# @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
4115
|
#########
|
3773
4116
|
# @note: this a best guess according to available philips models. Need more User-Agents
|
3774
|
-
- regex: ';
|
4117
|
+
- 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
4118
|
device_replacement: '$1'
|
3776
4119
|
brand_replacement: 'Philips'
|
3777
4120
|
model_replacement: '$1'
|
3778
|
-
- regex: ';
|
4121
|
+
- regex: '; {0,2}(?:Philips|PHILIPS)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3779
4122
|
device_replacement: 'Philips $1'
|
3780
4123
|
brand_replacement: 'Philips'
|
3781
4124
|
model_replacement: '$1'
|
@@ -3784,7 +4127,7 @@ device_parsers:
|
|
3784
4127
|
# Pipo
|
3785
4128
|
# @ref: http://www.pipo.cn/En/
|
3786
4129
|
#########
|
3787
|
-
- regex: 'Android 4
|
4130
|
+
- regex: 'Android 4\..{0,200}; {0,2}(M[12356789]|U[12368]|S[123])\ ?(pro)?(?: Build|\) AppleWebKit)'
|
3788
4131
|
device_replacement: 'Pipo $1$2'
|
3789
4132
|
brand_replacement: 'Pipo'
|
3790
4133
|
model_replacement: '$1$2'
|
@@ -3793,7 +4136,7 @@ device_parsers:
|
|
3793
4136
|
# Ployer
|
3794
4137
|
# @ref: http://en.ployer.cn/
|
3795
4138
|
#########
|
3796
|
-
- regex: ';
|
4139
|
+
- regex: '; {0,2}(MOMO[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3797
4140
|
device_replacement: '$1'
|
3798
4141
|
brand_replacement: 'Ployer'
|
3799
4142
|
model_replacement: '$1'
|
@@ -3802,11 +4145,11 @@ device_parsers:
|
|
3802
4145
|
# Polaroid/ Acho
|
3803
4146
|
# @ref: http://polaroidstore.com/store/start.asp?category_id=382&category_id2=0&order=title&filter1=&filter2=&filter3=&view=all
|
3804
4147
|
#########
|
3805
|
-
- regex: ';
|
4148
|
+
- regex: '; {0,2}(?:Polaroid[ _]|)((?:MIDC\d{3,}|PMID\d{2,}|PTAB\d{3,})[^;/]{0,30}?)(\/[^;/]{0,30}|)(?: Build|\) AppleWebKit)'
|
3806
4149
|
device_replacement: '$1'
|
3807
4150
|
brand_replacement: 'Polaroid'
|
3808
4151
|
model_replacement: '$1'
|
3809
|
-
- regex: ';
|
4152
|
+
- regex: '; {0,2}(?:Polaroid )(Tablet)(?: Build|\) AppleWebKit)'
|
3810
4153
|
device_replacement: '$1'
|
3811
4154
|
brand_replacement: 'Polaroid'
|
3812
4155
|
model_replacement: '$1'
|
@@ -3816,7 +4159,7 @@ device_parsers:
|
|
3816
4159
|
# @ref: http://pompmobileshop.com/
|
3817
4160
|
#########
|
3818
4161
|
#~ TODO
|
3819
|
-
- regex: ';
|
4162
|
+
- regex: '; {0,2}(POMP)[ _\-](.{1,200}?) {0,2}(?:Build|[;/\)])'
|
3820
4163
|
device_replacement: '$1 $2'
|
3821
4164
|
brand_replacement: 'Pomp'
|
3822
4165
|
model_replacement: '$2'
|
@@ -3825,11 +4168,11 @@ device_parsers:
|
|
3825
4168
|
# Positivo
|
3826
4169
|
# @ref: http://www.positivoinformatica.com.br/www/pessoal/tablet-ypy/
|
3827
4170
|
#########
|
3828
|
-
- regex: ';
|
4171
|
+
- regex: '; {0,2}(TB07STA|TB10STA|TB07FTA|TB10FTA)(?: Build|\) AppleWebKit)'
|
3829
4172
|
device_replacement: '$1'
|
3830
4173
|
brand_replacement: 'Positivo'
|
3831
4174
|
model_replacement: '$1'
|
3832
|
-
- regex: ';
|
4175
|
+
- regex: '; {0,2}(?:Positivo |)((?:YPY|Ypy)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3833
4176
|
device_replacement: '$1'
|
3834
4177
|
brand_replacement: 'Positivo'
|
3835
4178
|
model_replacement: '$1'
|
@@ -3839,15 +4182,15 @@ device_parsers:
|
|
3839
4182
|
# @ref: http://www.pointofview-online.com/default2.php
|
3840
4183
|
# @TODO: Smartphone Models MOB-3515, MOB-5045-B missing
|
3841
4184
|
#########
|
3842
|
-
- regex: ';
|
4185
|
+
- regex: '; {0,2}(MOB-[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3843
4186
|
device_replacement: '$1'
|
3844
4187
|
brand_replacement: 'POV'
|
3845
4188
|
model_replacement: '$1'
|
3846
|
-
- regex: ';
|
4189
|
+
- regex: '; {0,2}POV[ _\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3847
4190
|
device_replacement: 'POV $1'
|
3848
4191
|
brand_replacement: 'POV'
|
3849
4192
|
model_replacement: '$1'
|
3850
|
-
- regex: ';
|
4193
|
+
- regex: '; {0,2}((?:TAB-PLAYTAB|TAB-PROTAB|PROTAB|PlayTabPro|Mobii[ _\-]|TAB-P)[^;/]*)(?: Build|\) AppleWebKit)'
|
3851
4194
|
device_replacement: 'POV $1'
|
3852
4195
|
brand_replacement: 'POV'
|
3853
4196
|
model_replacement: '$1'
|
@@ -3857,7 +4200,7 @@ device_parsers:
|
|
3857
4200
|
# @ref: http://www.prestigio.com/catalogue/MultiPhones
|
3858
4201
|
# @ref: http://www.prestigio.com/catalogue/MultiPads
|
3859
4202
|
#########
|
3860
|
-
- regex: ';
|
4203
|
+
- regex: '; {0,2}(?:Prestigio |)((?:PAP|PMP)\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3861
4204
|
device_replacement: 'Prestigio $1'
|
3862
4205
|
brand_replacement: 'Prestigio'
|
3863
4206
|
model_replacement: '$1'
|
@@ -3866,7 +4209,7 @@ device_parsers:
|
|
3866
4209
|
# Proscan
|
3867
4210
|
# @ref: http://www.proscanvideo.com/products-search.asp?itemClass=TABLET&itemnmbr=
|
3868
4211
|
#########
|
3869
|
-
- regex: ';
|
4212
|
+
- regex: '; {0,2}(PLT[0-9]{4}.{0,200}?)(?: Build|\) AppleWebKit)'
|
3870
4213
|
device_replacement: '$1'
|
3871
4214
|
brand_replacement: 'Proscan'
|
3872
4215
|
model_replacement: '$1'
|
@@ -3875,15 +4218,15 @@ device_parsers:
|
|
3875
4218
|
# QMobile
|
3876
4219
|
# @ref: http://www.qmobile.com.pk/
|
3877
4220
|
#########
|
3878
|
-
- regex: ';
|
4221
|
+
- regex: '; {0,2}(A2|A5|A8|A900)_?(Classic|)(?: Build|\) AppleWebKit)'
|
3879
4222
|
device_replacement: '$1 $2'
|
3880
4223
|
brand_replacement: 'Qmobile'
|
3881
4224
|
model_replacement: '$1 $2'
|
3882
|
-
- regex: ';
|
4225
|
+
- regex: '; {0,2}(Q[Mm]obile)_([^_]+)_([^_]+?)(?: Build|\) AppleWebKit)'
|
3883
4226
|
device_replacement: 'Qmobile $2 $3'
|
3884
4227
|
brand_replacement: 'Qmobile'
|
3885
4228
|
model_replacement: '$2 $3'
|
3886
|
-
- regex: ';
|
4229
|
+
- regex: '; {0,2}(Q\-?[Mm]obile)[_ ](A[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3887
4230
|
device_replacement: 'Qmobile $2'
|
3888
4231
|
brand_replacement: 'Qmobile'
|
3889
4232
|
model_replacement: '$2'
|
@@ -3892,11 +4235,11 @@ device_parsers:
|
|
3892
4235
|
# Qmobilevn
|
3893
4236
|
# @ref: http://qmobile.vn/san-pham.html
|
3894
4237
|
#########
|
3895
|
-
- regex: ';
|
4238
|
+
- regex: '; {0,2}(Q\-Smart)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3896
4239
|
device_replacement: '$1 $2'
|
3897
4240
|
brand_replacement: 'Qmobilevn'
|
3898
4241
|
model_replacement: '$2'
|
3899
|
-
- regex: ';
|
4242
|
+
- regex: '; {0,2}(Q\-?[Mm]obile)[ _\-](S[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
3900
4243
|
device_replacement: '$1 $2'
|
3901
4244
|
brand_replacement: 'Qmobilevn'
|
3902
4245
|
model_replacement: '$2'
|
@@ -3905,7 +4248,7 @@ device_parsers:
|
|
3905
4248
|
# Quanta
|
3906
4249
|
# @ref: ?
|
3907
4250
|
#########
|
3908
|
-
- regex: ';
|
4251
|
+
- regex: '; {0,2}(TA1013)(?: Build|\) AppleWebKit)'
|
3909
4252
|
device_replacement: '$1'
|
3910
4253
|
brand_replacement: 'Quanta'
|
3911
4254
|
model_replacement: '$1'
|
@@ -3928,7 +4271,7 @@ device_parsers:
|
|
3928
4271
|
# @ref: http://www.rock-chips.com/a/cn/product/index.html
|
3929
4272
|
# @note: manufacturer sells chipsets - I assume that these UAs are dev-boards
|
3930
4273
|
#########
|
3931
|
-
- regex: ';
|
4274
|
+
- regex: '; {0,2}(RK\d+),?(?: Build|\) AppleWebKit)'
|
3932
4275
|
device_replacement: '$1'
|
3933
4276
|
brand_replacement: 'Rockchip'
|
3934
4277
|
model_replacement: '$1'
|
@@ -3941,55 +4284,55 @@ device_parsers:
|
|
3941
4284
|
# Samsung Android Devices
|
3942
4285
|
# @ref: http://www.samsung.com/us/mobile/cell-phones/all-products
|
3943
4286
|
#########
|
3944
|
-
- regex: ';
|
4287
|
+
- 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
4288
|
device_replacement: 'Samsung $1$2'
|
3946
4289
|
brand_replacement: 'Samsung'
|
3947
4290
|
model_replacement: '$2'
|
3948
|
-
- regex: ';
|
4291
|
+
- regex: '; {0,2}(Google |)(Nexus [Ss](?: 4G|)) Build/'
|
3949
4292
|
device_replacement: 'Samsung $1$2'
|
3950
4293
|
brand_replacement: 'Samsung'
|
3951
4294
|
model_replacement: '$2'
|
3952
|
-
- regex: ';
|
4295
|
+
- regex: '; {0,2}(SAMSUNG |Samsung )([^\/]{0,50})\/[^ ]{0,50} Build/'
|
3953
4296
|
device_replacement: 'Samsung $2'
|
3954
4297
|
brand_replacement: 'Samsung'
|
3955
4298
|
model_replacement: '$2'
|
3956
|
-
- regex: ';
|
4299
|
+
- regex: '; {0,2}(Galaxy(?: Ace| Nexus| S ?II+|Nexus S| with MCR 1.2| Mini Plus 4G|)) Build/'
|
3957
4300
|
device_replacement: 'Samsung $1'
|
3958
4301
|
brand_replacement: 'Samsung'
|
3959
4302
|
model_replacement: '$1'
|
3960
|
-
- regex: ';
|
4303
|
+
- regex: '; {0,2}(SAMSUNG[ _\-]|)(?:SAMSUNG[ _\-])([^;/]{1,100}) Build'
|
3961
4304
|
device_replacement: 'Samsung $2'
|
3962
4305
|
brand_replacement: 'Samsung'
|
3963
4306
|
model_replacement: '$2'
|
3964
|
-
- regex: ';
|
4307
|
+
- regex: '; {0,2}(SAMSUNG-|)(GT\-[BINPS]\d{4}[^\/]{0,50})(\/[^ ]{0,50}) Build'
|
3965
4308
|
device_replacement: 'Samsung $1$2$3'
|
3966
4309
|
brand_replacement: 'Samsung'
|
3967
4310
|
model_replacement: '$2'
|
3968
|
-
- regex: '(?:;
|
4311
|
+
- regex: '(?:; {0,2}|^)((?:GT\-[BIiNPS]\d{4}|I9\d{2}0[A-Za-z\+]?\b)[^;/\)]*?)(?:Build|Linux|MIUI|[;/\)])'
|
3969
4312
|
device_replacement: 'Samsung $1'
|
3970
4313
|
brand_replacement: 'Samsung'
|
3971
4314
|
model_replacement: '$1'
|
3972
|
-
- regex: '; (SAMSUNG-)([A-Za-z0-9\-]
|
4315
|
+
- regex: '; (SAMSUNG-)([A-Za-z0-9\-]{0,50}).{0,200} Build/'
|
3973
4316
|
device_replacement: 'Samsung $1$2'
|
3974
4317
|
brand_replacement: 'Samsung'
|
3975
4318
|
model_replacement: '$2'
|
3976
|
-
- regex: ';
|
4319
|
+
- regex: '; {0,2}((?:SCH|SGH|SHV|SHW|SPH|SC|SM)\-[A-Za-z0-9 ]{1,50})(/?[^ ]*|) Build'
|
3977
4320
|
device_replacement: 'Samsung $1'
|
3978
4321
|
brand_replacement: 'Samsung'
|
3979
4322
|
model_replacement: '$1'
|
3980
|
-
- regex: ';
|
4323
|
+
- regex: '; {0,2}((?:SC)\-[A-Za-z0-9 ]{1,50})(/?[^ ]*|)\)'
|
3981
4324
|
device_replacement: 'Samsung $1'
|
3982
4325
|
brand_replacement: 'Samsung'
|
3983
4326
|
model_replacement: '$1'
|
3984
|
-
- regex: ' ((?:SCH)\-[A-Za-z0-9 ]
|
4327
|
+
- regex: ' ((?:SCH)\-[A-Za-z0-9 ]{1,50})(/?[^ ]*|) Build'
|
3985
4328
|
device_replacement: 'Samsung $1'
|
3986
4329
|
brand_replacement: 'Samsung'
|
3987
4330
|
model_replacement: '$1'
|
3988
|
-
- regex: ';
|
4331
|
+
- regex: '; {0,2}(Behold ?(?:2|II)|YP\-G[^;/]{1,100}|EK-GC100|SCL21|I9300) Build'
|
3989
4332
|
device_replacement: 'Samsung $1'
|
3990
4333
|
brand_replacement: 'Samsung'
|
3991
4334
|
model_replacement: '$1'
|
3992
|
-
- regex: ';
|
4335
|
+
- regex: '; {0,2}((?:SCH|SGH|SHV|SHW|SPH|SC|SM)\-[A-Za-z0-9]{5,6})[\)]'
|
3993
4336
|
device_replacement: 'Samsung $1'
|
3994
4337
|
brand_replacement: 'Samsung'
|
3995
4338
|
model_replacement: '$1'
|
@@ -3999,11 +4342,11 @@ device_parsers:
|
|
3999
4342
|
# @ref: http://www.sharp-phone.com/en/index.html
|
4000
4343
|
# @ref: http://www.android.com/devices/?country=all&m=sharp
|
4001
4344
|
#########
|
4002
|
-
- regex: ';
|
4345
|
+
- regex: '; {0,2}(SH\-?\d\d[^;/]{1,100}|SBM\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4003
4346
|
device_replacement: '$1'
|
4004
4347
|
brand_replacement: 'Sharp'
|
4005
4348
|
model_replacement: '$1'
|
4006
|
-
- regex: ';
|
4349
|
+
- regex: '; {0,2}(SHARP[ -])([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4007
4350
|
device_replacement: '$1$2'
|
4008
4351
|
brand_replacement: 'Sharp'
|
4009
4352
|
model_replacement: '$2'
|
@@ -4012,15 +4355,15 @@ device_parsers:
|
|
4012
4355
|
# Simvalley
|
4013
4356
|
# @ref: http://www.simvalley-mobile.de/
|
4014
4357
|
#########
|
4015
|
-
- regex: ';
|
4358
|
+
- regex: '; {0,2}(SPX[_\-]\d[^;/]*)(?: Build|\) AppleWebKit)'
|
4016
4359
|
device_replacement: '$1'
|
4017
4360
|
brand_replacement: 'Simvalley'
|
4018
4361
|
model_replacement: '$1'
|
4019
|
-
- regex: ';
|
4362
|
+
- regex: '; {0,2}(SX7\-PEARL\.GmbH)(?: Build|\) AppleWebKit)'
|
4020
4363
|
device_replacement: '$1'
|
4021
4364
|
brand_replacement: 'Simvalley'
|
4022
4365
|
model_replacement: '$1'
|
4023
|
-
- regex: ';
|
4366
|
+
- regex: '; {0,2}(SP[T]?\-\d{2}[^;/]*)(?: Build|\) AppleWebKit)'
|
4024
4367
|
device_replacement: '$1'
|
4025
4368
|
brand_replacement: 'Simvalley'
|
4026
4369
|
model_replacement: '$1'
|
@@ -4030,7 +4373,7 @@ device_parsers:
|
|
4030
4373
|
# @ref: http://www.sk-w.com/phone/phone_list.jsp
|
4031
4374
|
# @ref: http://www.android.com/devices/?country=all&m=sk-telesys
|
4032
4375
|
#########
|
4033
|
-
- regex: ';
|
4376
|
+
- regex: '; {0,2}(SK\-.{0,200}?)(?: Build|\) AppleWebKit)'
|
4034
4377
|
device_replacement: '$1'
|
4035
4378
|
brand_replacement: 'SKtelesys'
|
4036
4379
|
model_replacement: '$1'
|
@@ -4039,11 +4382,11 @@ device_parsers:
|
|
4039
4382
|
# Skytex
|
4040
4383
|
# @ref: http://skytex.com/android
|
4041
4384
|
#########
|
4042
|
-
- regex: ';
|
4385
|
+
- regex: '; {0,2}(?:SKYTEX|SX)-([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4043
4386
|
device_replacement: '$1'
|
4044
4387
|
brand_replacement: 'Skytex'
|
4045
4388
|
model_replacement: '$1'
|
4046
|
-
- regex: ';
|
4389
|
+
- regex: '; {0,2}(IMAGINE [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4047
4390
|
device_replacement: '$1'
|
4048
4391
|
brand_replacement: 'Skytex'
|
4049
4392
|
model_replacement: '$1'
|
@@ -4053,7 +4396,7 @@ device_parsers:
|
|
4053
4396
|
# @ref: http://en.smartdevices.com.cn/Products/
|
4054
4397
|
# @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
4398
|
#########
|
4056
|
-
- regex: ';
|
4399
|
+
- regex: '; {0,2}(SmartQ) ?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4057
4400
|
device_replacement: '$1 $2'
|
4058
4401
|
brand_replacement: '$1'
|
4059
4402
|
model_replacement: '$2'
|
@@ -4063,7 +4406,7 @@ device_parsers:
|
|
4063
4406
|
# @ref: http://www.smartbitt.com/
|
4064
4407
|
# @missing: SBT Useragents
|
4065
4408
|
#########
|
4066
|
-
- regex: ';
|
4409
|
+
- regex: '; {0,2}(WF7C|WF10C|SBT[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4067
4410
|
device_replacement: '$1'
|
4068
4411
|
brand_replacement: 'Smartbitt'
|
4069
4412
|
model_replacement: '$1'
|
@@ -4072,15 +4415,15 @@ device_parsers:
|
|
4072
4415
|
# Softbank (Operator Branded Devices)
|
4073
4416
|
# @ref: http://www.ipentec.com/document/document.aspx?page=android-useragent
|
4074
4417
|
#########
|
4075
|
-
- regex: ';
|
4418
|
+
- regex: '; {0,2}(SBM(?:003SH|005SH|006SH|007SH|102SH)) Build'
|
4076
4419
|
device_replacement: '$1'
|
4077
4420
|
brand_replacement: 'Sharp'
|
4078
4421
|
model_replacement: '$1'
|
4079
|
-
- regex: ';
|
4422
|
+
- regex: '; {0,2}(003P|101P|101P11C|102P) Build'
|
4080
4423
|
device_replacement: '$1'
|
4081
4424
|
brand_replacement: 'Panasonic'
|
4082
4425
|
model_replacement: '$1'
|
4083
|
-
- regex: ';
|
4426
|
+
- regex: '; {0,2}(00\dZ) Build/'
|
4084
4427
|
device_replacement: '$1'
|
4085
4428
|
brand_replacement: 'ZTE'
|
4086
4429
|
model_replacement: '$1'
|
@@ -4088,11 +4431,11 @@ device_parsers:
|
|
4088
4431
|
device_replacement: '$1'
|
4089
4432
|
brand_replacement: 'HTC'
|
4090
4433
|
model_replacement: '$1'
|
4091
|
-
- regex: ';
|
4434
|
+
- regex: '; {0,2}(001HT|X06HT) Build'
|
4092
4435
|
device_replacement: '$1'
|
4093
4436
|
brand_replacement: 'HTC'
|
4094
4437
|
model_replacement: '$1'
|
4095
|
-
- regex: ';
|
4438
|
+
- regex: '; {0,2}(201M) Build'
|
4096
4439
|
device_replacement: '$1'
|
4097
4440
|
brand_replacement: 'Motorola'
|
4098
4441
|
model_replacement: 'XT902'
|
@@ -4102,11 +4445,11 @@ device_parsers:
|
|
4102
4445
|
# @ref: http://www.trekstor.co.uk/surftabs-en.html
|
4103
4446
|
# @note: Must come before SonyEricsson
|
4104
4447
|
#########
|
4105
|
-
- regex: ';
|
4448
|
+
- regex: '; {0,2}(ST\d{4}.{0,200})Build/ST'
|
4106
4449
|
device_replacement: 'Trekstor $1'
|
4107
4450
|
brand_replacement: 'Trekstor'
|
4108
4451
|
model_replacement: '$1'
|
4109
|
-
- regex: ';
|
4452
|
+
- regex: '; {0,2}(ST\d{4}.{0,200}?)(?: Build|\) AppleWebKit)'
|
4110
4453
|
device_replacement: 'Trekstor $1'
|
4111
4454
|
brand_replacement: 'Trekstor'
|
4112
4455
|
model_replacement: '$1'
|
@@ -4118,16 +4461,16 @@ device_parsers:
|
|
4118
4461
|
# @TODO: type!
|
4119
4462
|
#########
|
4120
4463
|
# android matchers
|
4121
|
-
- regex: ';
|
4464
|
+
- regex: '; {0,2}(Sony ?Ericsson ?)([^;/]{1,100}) Build'
|
4122
4465
|
device_replacement: '$1$2'
|
4123
4466
|
brand_replacement: 'SonyEricsson'
|
4124
4467
|
model_replacement: '$2'
|
4125
|
-
- regex: ';
|
4468
|
+
- regex: '; {0,2}((?:SK|ST|E|X|LT|MK|MT|WT)\d{2}[a-z0-9]*(?:-o|)|R800i|U20i) Build'
|
4126
4469
|
device_replacement: '$1'
|
4127
4470
|
brand_replacement: 'SonyEricsson'
|
4128
4471
|
model_replacement: '$1'
|
4129
4472
|
# TODO X\d+ is wrong
|
4130
|
-
- regex: ';
|
4473
|
+
- regex: '; {0,2}(Xperia (?:A8|Arc|Acro|Active|Live with Walkman|Mini|Neo|Play|Pro|Ray|X\d+)[^;/]{0,50}) Build'
|
4131
4474
|
regex_flag: 'i'
|
4132
4475
|
device_replacement: '$1'
|
4133
4476
|
brand_replacement: 'SonyEricsson'
|
@@ -4139,31 +4482,31 @@ device_parsers:
|
|
4139
4482
|
# @ref: http://www.sonymobile.com/global-en/products/phones/
|
4140
4483
|
# @ref: http://www.sony.jp/tablet/
|
4141
4484
|
#########
|
4142
|
-
- regex: '; Sony (Tablet[^;/]
|
4485
|
+
- regex: '; Sony (Tablet[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4143
4486
|
device_replacement: 'Sony $1'
|
4144
4487
|
brand_replacement: 'Sony'
|
4145
4488
|
model_replacement: '$1'
|
4146
|
-
- regex: '; Sony ([^;/]
|
4489
|
+
- regex: '; Sony ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4147
4490
|
device_replacement: 'Sony $1'
|
4148
4491
|
brand_replacement: 'Sony'
|
4149
4492
|
model_replacement: '$1'
|
4150
|
-
- regex: ';
|
4493
|
+
- regex: '; {0,2}(Sony)([A-Za-z0-9\-]+)(?: Build|\) AppleWebKit)'
|
4151
4494
|
device_replacement: '$1 $2'
|
4152
4495
|
brand_replacement: '$1'
|
4153
4496
|
model_replacement: '$2'
|
4154
|
-
- regex: ';
|
4497
|
+
- regex: '; {0,2}(Xperia [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4155
4498
|
device_replacement: '$1'
|
4156
4499
|
brand_replacement: 'Sony'
|
4157
4500
|
model_replacement: '$1'
|
4158
|
-
- regex: ';
|
4501
|
+
- 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
4502
|
device_replacement: '$1'
|
4160
4503
|
brand_replacement: 'Sony'
|
4161
4504
|
model_replacement: '$1'
|
4162
|
-
- regex: ';
|
4505
|
+
- regex: '; {0,2}(SGP\d{3}|SGPT\d{2})(?: Build|\) AppleWebKit)'
|
4163
4506
|
device_replacement: '$1'
|
4164
4507
|
brand_replacement: 'Sony'
|
4165
4508
|
model_replacement: '$1'
|
4166
|
-
- regex: ';
|
4509
|
+
- regex: '; {0,2}(NW-Z1000Series)(?: Build|\) AppleWebKit)'
|
4167
4510
|
device_replacement: '$1'
|
4168
4511
|
brand_replacement: 'Sony'
|
4169
4512
|
model_replacement: '$1'
|
@@ -4186,7 +4529,7 @@ device_parsers:
|
|
4186
4529
|
# Spice
|
4187
4530
|
# @ref: http://www.spicemobilephones.co.in/
|
4188
4531
|
#########
|
4189
|
-
- regex: ';
|
4532
|
+
- regex: '; {0,2}((?:CSL_Spice|Spice|SPICE|CSL)[ _\-]?|)([Mm][Ii])([ _\-]|)(\d{3}[^;/]*)(?: Build|\) AppleWebKit)'
|
4190
4533
|
device_replacement: '$1$2$3$4'
|
4191
4534
|
brand_replacement: 'Spice'
|
4192
4535
|
model_replacement: 'Mi$4'
|
@@ -4195,7 +4538,7 @@ device_parsers:
|
|
4195
4538
|
# Sprint (Operator Branded Devices)
|
4196
4539
|
# @ref:
|
4197
4540
|
#########
|
4198
|
-
- regex: ';
|
4541
|
+
- regex: '; {0,2}(Sprint )(.{1,200}?) {0,2}(?:Build|[;/])'
|
4199
4542
|
device_replacement: '$1$2'
|
4200
4543
|
brand_replacement: 'Sprint'
|
4201
4544
|
model_replacement: '$2'
|
@@ -4208,7 +4551,7 @@ device_parsers:
|
|
4208
4551
|
# Tagi
|
4209
4552
|
# @ref: ??
|
4210
4553
|
#########
|
4211
|
-
- regex: ';
|
4554
|
+
- regex: '; {0,2}(TAGI[ ]?)(MID) ?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4212
4555
|
device_replacement: '$1$2$3'
|
4213
4556
|
brand_replacement: 'Tagi'
|
4214
4557
|
model_replacement: '$2$3'
|
@@ -4217,7 +4560,7 @@ device_parsers:
|
|
4217
4560
|
# Tecmobile
|
4218
4561
|
# @ref: http://www.tecmobile.com/
|
4219
4562
|
#########
|
4220
|
-
- regex: ';
|
4563
|
+
- regex: '; {0,2}(Oyster500|Opal 800)(?: Build|\) AppleWebKit)'
|
4221
4564
|
device_replacement: 'Tecmobile $1'
|
4222
4565
|
brand_replacement: 'Tecmobile'
|
4223
4566
|
model_replacement: '$1'
|
@@ -4226,7 +4569,7 @@ device_parsers:
|
|
4226
4569
|
# Tecno
|
4227
4570
|
# @ref: www.tecno-mobile.com/
|
4228
4571
|
#########
|
4229
|
-
- regex: ';
|
4572
|
+
- regex: '; {0,2}(TECNO[ _])([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4230
4573
|
device_replacement: '$1$2'
|
4231
4574
|
brand_replacement: 'Tecno'
|
4232
4575
|
model_replacement: '$2'
|
@@ -4235,7 +4578,7 @@ device_parsers:
|
|
4235
4578
|
# Telechips, Techvision evaluation boards
|
4236
4579
|
# @ref:
|
4237
4580
|
#########
|
4238
|
-
- regex: ';
|
4581
|
+
- regex: '; {0,2}Android for (Telechips|Techvision) ([^ ]+) '
|
4239
4582
|
regex_flag: 'i'
|
4240
4583
|
device_replacement: '$1 $2'
|
4241
4584
|
brand_replacement: '$1'
|
@@ -4246,7 +4589,7 @@ device_parsers:
|
|
4246
4589
|
# @ref: http://www.telstra.com.au/home-phone/thub-2/
|
4247
4590
|
# @ref: https://support.google.com/googleplay/answer/1727131?hl=en
|
4248
4591
|
#########
|
4249
|
-
- regex: ';
|
4592
|
+
- regex: '; {0,2}(T-Hub2)(?: Build|\) AppleWebKit)'
|
4250
4593
|
device_replacement: '$1'
|
4251
4594
|
brand_replacement: 'Telstra'
|
4252
4595
|
model_replacement: '$1'
|
@@ -4255,7 +4598,7 @@ device_parsers:
|
|
4255
4598
|
# Terra
|
4256
4599
|
# @ref: http://www.wortmann.de/
|
4257
4600
|
#########
|
4258
|
-
- regex: ';
|
4601
|
+
- regex: '; {0,2}(PAD) ?(100[12])(?: Build|\) AppleWebKit)'
|
4259
4602
|
device_replacement: 'Terra $1$2'
|
4260
4603
|
brand_replacement: 'Terra'
|
4261
4604
|
model_replacement: '$1$2'
|
@@ -4264,7 +4607,7 @@ device_parsers:
|
|
4264
4607
|
# Texet
|
4265
4608
|
# @ref: http://www.texet.ru/tablet/
|
4266
4609
|
#########
|
4267
|
-
- regex: ';
|
4610
|
+
- regex: '; {0,2}(T[BM]-\d{3}[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4268
4611
|
device_replacement: '$1'
|
4269
4612
|
brand_replacement: 'Texet'
|
4270
4613
|
model_replacement: '$1'
|
@@ -4273,11 +4616,11 @@ device_parsers:
|
|
4273
4616
|
# Thalia
|
4274
4617
|
# @ref: http://www.thalia.de/shop/tolino-shine-ereader/show/
|
4275
4618
|
#########
|
4276
|
-
- regex: ';
|
4619
|
+
- regex: '; {0,2}(tolino [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4277
4620
|
device_replacement: '$1'
|
4278
4621
|
brand_replacement: 'Thalia'
|
4279
4622
|
model_replacement: '$1'
|
4280
|
-
- regex: ';
|
4623
|
+
- regex: '; {0,2}Build/.{0,200} (TOLINO_BROWSER)'
|
4281
4624
|
device_replacement: '$1'
|
4282
4625
|
brand_replacement: 'Thalia'
|
4283
4626
|
model_replacement: 'Tolino Shine'
|
@@ -4287,11 +4630,11 @@ device_parsers:
|
|
4287
4630
|
# @ref: http://en.thl.com.cn/Mobile
|
4288
4631
|
# @ref: http://thlmobilestore.com
|
4289
4632
|
#########
|
4290
|
-
- regex: ';
|
4633
|
+
- regex: '; {0,2}(?:CJ[ -])?(ThL|THL)[ -]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4291
4634
|
device_replacement: '$1 $2'
|
4292
4635
|
brand_replacement: 'Thl'
|
4293
4636
|
model_replacement: '$2'
|
4294
|
-
- regex: ';
|
4637
|
+
- regex: '; {0,2}(T100|T200|T5|W100|W200|W8s)(?: Build|\) AppleWebKit)'
|
4295
4638
|
device_replacement: '$1'
|
4296
4639
|
brand_replacement: 'Thl'
|
4297
4640
|
model_replacement: '$1'
|
@@ -4300,28 +4643,28 @@ device_parsers:
|
|
4300
4643
|
# T-Mobile (Operator Branded Devices)
|
4301
4644
|
#########
|
4302
4645
|
# @ref: https://en.wikipedia.org/wiki/HTC_Hero
|
4303
|
-
- regex: ';
|
4646
|
+
- regex: '; {0,2}(T-Mobile[ _]G2[ _]Touch) Build'
|
4304
4647
|
device_replacement: '$1'
|
4305
4648
|
brand_replacement: 'HTC'
|
4306
4649
|
model_replacement: 'Hero'
|
4307
4650
|
# @ref: https://en.wikipedia.org/wiki/HTC_Desire_Z
|
4308
|
-
- regex: ';
|
4651
|
+
- regex: '; {0,2}(T-Mobile[ _]G2) Build'
|
4309
4652
|
device_replacement: '$1'
|
4310
4653
|
brand_replacement: 'HTC'
|
4311
4654
|
model_replacement: 'Desire Z'
|
4312
|
-
- regex: ';
|
4655
|
+
- regex: '; {0,2}(T-Mobile myTouch Q) Build'
|
4313
4656
|
device_replacement: '$1'
|
4314
4657
|
brand_replacement: 'Huawei'
|
4315
4658
|
model_replacement: 'U8730'
|
4316
|
-
- regex: ';
|
4659
|
+
- regex: '; {0,2}(T-Mobile myTouch) Build'
|
4317
4660
|
device_replacement: '$1'
|
4318
4661
|
brand_replacement: 'Huawei'
|
4319
4662
|
model_replacement: 'U8680'
|
4320
|
-
- regex: ';
|
4663
|
+
- regex: '; {0,2}(T-Mobile_Espresso) Build'
|
4321
4664
|
device_replacement: '$1'
|
4322
4665
|
brand_replacement: 'HTC'
|
4323
4666
|
model_replacement: 'Espresso'
|
4324
|
-
- regex: ';
|
4667
|
+
- regex: '; {0,2}(T-Mobile G1) Build'
|
4325
4668
|
device_replacement: '$1'
|
4326
4669
|
brand_replacement: 'HTC'
|
4327
4670
|
model_replacement: 'Dream'
|
@@ -4329,11 +4672,11 @@ device_parsers:
|
|
4329
4672
|
device_replacement: '$1$2 $3 $4'
|
4330
4673
|
brand_replacement: 'HTC'
|
4331
4674
|
model_replacement: '$2 $3 $4'
|
4332
|
-
- regex: '\b(T-Mobile)_([^_]+)_(
|
4675
|
+
- regex: '\b(T-Mobile)_([^_]+)_(.{0,200}) Build'
|
4333
4676
|
device_replacement: '$1 $2 $3'
|
4334
4677
|
brand_replacement: 'Tmobile'
|
4335
4678
|
model_replacement: '$2 $3'
|
4336
|
-
- regex: '\b(T-Mobile)[_ ]?(
|
4679
|
+
- regex: '\b(T-Mobile)[_ ]?(.{0,200}?)Build'
|
4337
4680
|
device_replacement: '$1 $2'
|
4338
4681
|
brand_replacement: 'Tmobile'
|
4339
4682
|
model_replacement: '$2'
|
@@ -4351,7 +4694,7 @@ device_parsers:
|
|
4351
4694
|
# Tooky
|
4352
4695
|
# @ref: http://www.tookymobile.com/
|
4353
4696
|
#########
|
4354
|
-
- regex: '
|
4697
|
+
- regex: ' ?(TOOKY)[ _\-]([^;/]{1,100}) ?(?:Build|;)'
|
4355
4698
|
regex_flag: 'i'
|
4356
4699
|
device_replacement: '$1 $2'
|
4357
4700
|
brand_replacement: 'Tooky'
|
@@ -4366,11 +4709,11 @@ device_parsers:
|
|
4366
4709
|
device_replacement: '$1'
|
4367
4710
|
brand_replacement: 'Toshiba'
|
4368
4711
|
model_replacement: 'Folio 100'
|
4369
|
-
- regex: ';
|
4712
|
+
- regex: '; {0,2}([Ff]olio ?100)(?: Build|\) AppleWebKit)'
|
4370
4713
|
device_replacement: '$1'
|
4371
4714
|
brand_replacement: 'Toshiba'
|
4372
4715
|
model_replacement: 'Folio 100'
|
4373
|
-
- regex: ';
|
4716
|
+
- 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
4717
|
device_replacement: 'Toshiba $1'
|
4375
4718
|
brand_replacement: 'Toshiba'
|
4376
4719
|
model_replacement: '$1'
|
@@ -4379,12 +4722,12 @@ device_parsers:
|
|
4379
4722
|
# Touchmate
|
4380
4723
|
# @ref: http://touchmatepc.com/new/
|
4381
4724
|
#########
|
4382
|
-
- regex: ';
|
4725
|
+
- regex: '; {0,2}(TM-MID\d+[^;/]{1,50}|TOUCHMATE|MID-750)(?: Build|\) AppleWebKit)'
|
4383
4726
|
device_replacement: '$1'
|
4384
4727
|
brand_replacement: 'Touchmate'
|
4385
4728
|
model_replacement: '$1'
|
4386
4729
|
# @todo: needs verification user-agents missing
|
4387
|
-
- regex: ';
|
4730
|
+
- regex: '; {0,2}(TM-SM\d+[^;/]{1,50}?)(?: Build|\) AppleWebKit)'
|
4388
4731
|
device_replacement: '$1'
|
4389
4732
|
brand_replacement: 'Touchmate'
|
4390
4733
|
model_replacement: '$1'
|
@@ -4393,11 +4736,11 @@ device_parsers:
|
|
4393
4736
|
# Treq
|
4394
4737
|
# @ref: http://www.treq.co.id/product
|
4395
4738
|
#########
|
4396
|
-
- regex: ';
|
4739
|
+
- regex: '; {0,2}(A10 [Bb]asic2?)(?: Build|\) AppleWebKit)'
|
4397
4740
|
device_replacement: '$1'
|
4398
4741
|
brand_replacement: 'Treq'
|
4399
4742
|
model_replacement: '$1'
|
4400
|
-
- regex: ';
|
4743
|
+
- regex: '; {0,2}(TREQ[ _\-])([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4401
4744
|
regex_flag: 'i'
|
4402
4745
|
device_replacement: '$1$2'
|
4403
4746
|
brand_replacement: 'Treq'
|
@@ -4409,21 +4752,40 @@ device_parsers:
|
|
4409
4752
|
# @models: A936|A603|X-5|X-3
|
4410
4753
|
#########
|
4411
4754
|
# @todo: guessed markers
|
4412
|
-
- regex: ';
|
4755
|
+
- regex: '; {0,2}(X-?5|X-?3)(?: Build|\) AppleWebKit)'
|
4413
4756
|
device_replacement: '$1'
|
4414
4757
|
brand_replacement: 'Umeox'
|
4415
4758
|
model_replacement: '$1'
|
4416
4759
|
# @todo: guessed markers
|
4417
|
-
- regex: ';
|
4760
|
+
- regex: '; {0,2}(A502\+?|A936|A603|X1|X2)(?: Build|\) AppleWebKit)'
|
4418
4761
|
device_replacement: '$1'
|
4419
4762
|
brand_replacement: 'Umeox'
|
4420
4763
|
model_replacement: '$1'
|
4421
4764
|
|
4765
|
+
#########
|
4766
|
+
# Vernee
|
4767
|
+
# @ref: http://vernee.cc/
|
4768
|
+
# @models: Thor - Thor E
|
4769
|
+
#########
|
4770
|
+
- regex: '; thor Build/'
|
4771
|
+
device_replacement: 'Thor'
|
4772
|
+
brand_replacement: 'Vernee'
|
4773
|
+
model_replacement: 'Thor'
|
4774
|
+
# Regex to modidy for Thor Plus (don't find example UA)
|
4775
|
+
- regex: '; Thor (E)? Build/'
|
4776
|
+
device_replacement: 'Thor $1'
|
4777
|
+
brand_replacement: 'Vernee'
|
4778
|
+
model_replacement: 'Thor'
|
4779
|
+
- regex: '; Apollo Lite Build/'
|
4780
|
+
device_replacement: 'Apollo Lite'
|
4781
|
+
brand_replacement: 'Vernee'
|
4782
|
+
model_replacement: 'Apollo'
|
4783
|
+
|
4422
4784
|
#########
|
4423
4785
|
# Versus
|
4424
4786
|
# @ref: http://versusuk.com/support.html
|
4425
4787
|
#########
|
4426
|
-
- regex: '(TOUCH(?:TAB|PAD)
|
4788
|
+
- regex: '(TOUCH(?:TAB|PAD).{1,200}?)(?: Build|\) AppleWebKit)'
|
4427
4789
|
regex_flag: 'i'
|
4428
4790
|
device_replacement: 'Versus $1'
|
4429
4791
|
brand_replacement: 'Versus'
|
@@ -4433,7 +4795,7 @@ device_parsers:
|
|
4433
4795
|
# Vertu
|
4434
4796
|
# @ref: http://www.vertu.com/
|
4435
4797
|
#########
|
4436
|
-
- regex: '(VERTU) ([^;/]
|
4798
|
+
- regex: '(VERTU) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4437
4799
|
device_replacement: '$1 $2'
|
4438
4800
|
brand_replacement: 'Vertu'
|
4439
4801
|
model_replacement: '$2'
|
@@ -4442,7 +4804,7 @@ device_parsers:
|
|
4442
4804
|
# Videocon
|
4443
4805
|
# @ref: http://www.videoconmobiles.com
|
4444
4806
|
#########
|
4445
|
-
- regex: ';
|
4807
|
+
- regex: '; {0,2}(Videocon)[ _\-]([^;/]{1,100}?) {0,2}(?:Build|;)'
|
4446
4808
|
device_replacement: '$1 $2'
|
4447
4809
|
brand_replacement: 'Videocon'
|
4448
4810
|
model_replacement: '$2'
|
@@ -4455,15 +4817,15 @@ device_parsers:
|
|
4455
4817
|
# Viewsonic
|
4456
4818
|
# @ref: http://viewsonic.com
|
4457
4819
|
#########
|
4458
|
-
- regex: ';
|
4820
|
+
- regex: '; {0,2}((?:ViewPad|ViewPhone|VSD)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4459
4821
|
device_replacement: '$1'
|
4460
4822
|
brand_replacement: 'Viewsonic'
|
4461
4823
|
model_replacement: '$1'
|
4462
|
-
- regex: ';
|
4824
|
+
- regex: '; {0,2}(ViewSonic-)([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4463
4825
|
device_replacement: '$1$2'
|
4464
4826
|
brand_replacement: 'Viewsonic'
|
4465
4827
|
model_replacement: '$2'
|
4466
|
-
- regex: ';
|
4828
|
+
- regex: '; {0,2}(GTablet.{0,200}?)(?: Build|\) AppleWebKit)'
|
4467
4829
|
device_replacement: '$1'
|
4468
4830
|
brand_replacement: 'Viewsonic'
|
4469
4831
|
model_replacement: '$1'
|
@@ -4472,7 +4834,7 @@ device_parsers:
|
|
4472
4834
|
# vivo
|
4473
4835
|
# @ref: http://vivo.cn/
|
4474
4836
|
#########
|
4475
|
-
- regex: ';
|
4837
|
+
- regex: '; {0,2}([Vv]ivo)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4476
4838
|
device_replacement: '$1 $2'
|
4477
4839
|
brand_replacement: 'vivo'
|
4478
4840
|
model_replacement: '$2'
|
@@ -4481,7 +4843,7 @@ device_parsers:
|
|
4481
4843
|
# Vodafone (Operator Branded Devices)
|
4482
4844
|
# @ref: ??
|
4483
4845
|
#########
|
4484
|
-
- regex: '(Vodafone) (
|
4846
|
+
- regex: '(Vodafone) (.{0,200}?)(?: Build|\) AppleWebKit)'
|
4485
4847
|
device_replacement: '$1 $2'
|
4486
4848
|
brand_replacement: '$1'
|
4487
4849
|
model_replacement: '$2'
|
@@ -4490,7 +4852,7 @@ device_parsers:
|
|
4490
4852
|
# Walton
|
4491
4853
|
# @ref: http://www.waltonbd.com/
|
4492
4854
|
#########
|
4493
|
-
- regex: ';
|
4855
|
+
- regex: '; {0,2}(?:Walton[ _\-]|)(Primo[ _\-][^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4494
4856
|
regex_flag: 'i'
|
4495
4857
|
device_replacement: 'Walton $1'
|
4496
4858
|
brand_replacement: 'Walton'
|
@@ -4500,7 +4862,7 @@ device_parsers:
|
|
4500
4862
|
# Wiko
|
4501
4863
|
# @ref: http://fr.wikomobile.com/collection.php?s=Smartphones
|
4502
4864
|
#########
|
4503
|
-
- regex: ';
|
4865
|
+
- 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
4866
|
regex_flag: 'i'
|
4505
4867
|
device_replacement: 'Wiko $1'
|
4506
4868
|
brand_replacement: 'Wiko'
|
@@ -4510,7 +4872,7 @@ device_parsers:
|
|
4510
4872
|
# WellcoM
|
4511
4873
|
# @ref: ??
|
4512
4874
|
#########
|
4513
|
-
- regex: ';
|
4875
|
+
- regex: '; {0,2}WellcoM-([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4514
4876
|
device_replacement: 'Wellcom $1'
|
4515
4877
|
brand_replacement: 'Wellcom'
|
4516
4878
|
model_replacement: '$1'
|
@@ -4528,7 +4890,7 @@ device_parsers:
|
|
4528
4890
|
# Wolfgang
|
4529
4891
|
# @ref: http://wolfgangmobile.com/
|
4530
4892
|
#########
|
4531
|
-
- regex: ';
|
4893
|
+
- regex: '; {0,2}(AT-AS[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4532
4894
|
device_replacement: 'Wolfgang $1'
|
4533
4895
|
brand_replacement: 'Wolfgang'
|
4534
4896
|
model_replacement: '$1'
|
@@ -4537,7 +4899,7 @@ device_parsers:
|
|
4537
4899
|
# Woxter
|
4538
4900
|
# @ref: http://www.woxter.es/es-es/categories/index
|
4539
4901
|
#########
|
4540
|
-
- regex: ';
|
4902
|
+
- regex: '; {0,2}(?:Woxter|Wxt) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4541
4903
|
device_replacement: 'Woxter $1'
|
4542
4904
|
brand_replacement: 'Woxter'
|
4543
4905
|
model_replacement: '$1'
|
@@ -4546,7 +4908,7 @@ device_parsers:
|
|
4546
4908
|
# Yarvik Zania
|
4547
4909
|
# @ref: http://yarvik.com
|
4548
4910
|
#########
|
4549
|
-
- regex: ';
|
4911
|
+
- 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
4912
|
device_replacement: 'Yarvik $1'
|
4551
4913
|
brand_replacement: 'Yarvik'
|
4552
4914
|
model_replacement: '$1'
|
@@ -4560,7 +4922,7 @@ device_parsers:
|
|
4560
4922
|
# M778, M7000, M7000AD, M7000NBD, M7001, M7002, M7002KBD, M777, M767,
|
4561
4923
|
# M789, M799, M769, M757, M755, M753, M752, M739, M729, M723, M712, M727
|
4562
4924
|
#########
|
4563
|
-
- regex: ';
|
4925
|
+
- regex: '; {0,2}([A-Z]{2,4})(M\d{3,}[A-Z]{2})([^;\)\/]*)(?: Build|[;\)])'
|
4564
4926
|
device_replacement: 'Yifang $1$2$3'
|
4565
4927
|
brand_replacement: 'Yifang'
|
4566
4928
|
model_replacement: '$2'
|
@@ -4569,19 +4931,19 @@ device_parsers:
|
|
4569
4931
|
# XiaoMi
|
4570
4932
|
# @ref: http://www.xiaomi.com/event/buyphone
|
4571
4933
|
#########
|
4572
|
-
- regex: ';
|
4934
|
+
- regex: '; {0,2}((Mi|MI|HM|MI-ONE|Redmi)[ -](NOTE |Note |)[^;/]*) (Build|MIUI)/'
|
4573
4935
|
device_replacement: 'XiaoMi $1'
|
4574
4936
|
brand_replacement: 'XiaoMi'
|
4575
4937
|
model_replacement: '$1'
|
4576
|
-
- regex: ';
|
4938
|
+
- regex: '; {0,2}((Mi|MI|HM|MI-ONE|Redmi)[ -](NOTE |Note |)[^;/\)]*)'
|
4577
4939
|
device_replacement: 'XiaoMi $1'
|
4578
4940
|
brand_replacement: 'XiaoMi'
|
4579
4941
|
model_replacement: '$1'
|
4580
|
-
- regex: ';
|
4942
|
+
- regex: '; {0,2}(MIX) (Build|MIUI)/'
|
4581
4943
|
device_replacement: 'XiaoMi $1'
|
4582
4944
|
brand_replacement: 'XiaoMi'
|
4583
4945
|
model_replacement: '$1'
|
4584
|
-
- regex: ';
|
4946
|
+
- regex: '; {0,2}((MIX) ([^;/]*)) (Build|MIUI)/'
|
4585
4947
|
device_replacement: 'XiaoMi $1'
|
4586
4948
|
brand_replacement: 'XiaoMi'
|
4587
4949
|
model_replacement: '$1'
|
@@ -4590,17 +4952,17 @@ device_parsers:
|
|
4590
4952
|
# Xolo
|
4591
4953
|
# @ref: http://www.xolo.in/
|
4592
4954
|
#########
|
4593
|
-
- regex: ';
|
4955
|
+
- regex: '; {0,2}XOLO[ _]([^;/]{0,30}tab.{0,30})(?: Build|\) AppleWebKit)'
|
4594
4956
|
regex_flag: 'i'
|
4595
4957
|
device_replacement: 'Xolo $1'
|
4596
4958
|
brand_replacement: 'Xolo'
|
4597
4959
|
model_replacement: '$1'
|
4598
|
-
- regex: ';
|
4960
|
+
- regex: '; {0,2}XOLO[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4599
4961
|
regex_flag: 'i'
|
4600
4962
|
device_replacement: 'Xolo $1'
|
4601
4963
|
brand_replacement: 'Xolo'
|
4602
4964
|
model_replacement: '$1'
|
4603
|
-
- regex: ';
|
4965
|
+
- regex: '; {0,2}(q\d0{2,3}[a-z]?)(?: Build|\) AppleWebKit)'
|
4604
4966
|
regex_flag: 'i'
|
4605
4967
|
device_replacement: 'Xolo $1'
|
4606
4968
|
brand_replacement: 'Xolo'
|
@@ -4610,7 +4972,7 @@ device_parsers:
|
|
4610
4972
|
# Xoro
|
4611
4973
|
# @ref: http://www.xoro.de/produkte/
|
4612
4974
|
#########
|
4613
|
-
- regex: ';
|
4975
|
+
- regex: '; {0,2}(PAD ?[79]\d+[^;/]{0,50}|TelePAD\d+[^;/])(?: Build|\) AppleWebKit)'
|
4614
4976
|
device_replacement: 'Xoro $1'
|
4615
4977
|
brand_replacement: 'Xoro'
|
4616
4978
|
model_replacement: '$1'
|
@@ -4619,7 +4981,7 @@ device_parsers:
|
|
4619
4981
|
# Zopo
|
4620
4982
|
# @ref: http://www.zopomobiles.com/products.html
|
4621
4983
|
#########
|
4622
|
-
- regex: ';
|
4984
|
+
- regex: '; {0,2}(?:(?:ZOPO|Zopo)[ _]([^;/]{1,100}?)|(ZP ?(?:\d{2}[^;/]{1,100}|C2))|(C[2379]))(?: Build|\) AppleWebKit)'
|
4623
4985
|
device_replacement: '$1$2$3'
|
4624
4986
|
brand_replacement: 'Zopo'
|
4625
4987
|
model_replacement: '$1$2$3'
|
@@ -4628,11 +4990,11 @@ device_parsers:
|
|
4628
4990
|
# ZiiLabs
|
4629
4991
|
# @ref: http://www.ziilabs.com/products/platforms/androidreferencetablets.php
|
4630
4992
|
#########
|
4631
|
-
- regex: ';
|
4993
|
+
- regex: '; {0,2}(ZiiLABS) (Zii[^;/]*)(?: Build|\) AppleWebKit)'
|
4632
4994
|
device_replacement: '$1 $2'
|
4633
4995
|
brand_replacement: 'ZiiLabs'
|
4634
4996
|
model_replacement: '$2'
|
4635
|
-
- regex: ';
|
4997
|
+
- regex: '; {0,2}(Zii)_([^;/]*)(?: Build|\) AppleWebKit)'
|
4636
4998
|
device_replacement: '$1 $2'
|
4637
4999
|
brand_replacement: 'ZiiLabs'
|
4638
5000
|
model_replacement: '$2'
|
@@ -4641,36 +5003,36 @@ device_parsers:
|
|
4641
5003
|
# ZTE
|
4642
5004
|
# @ref: http://www.ztedevices.com/
|
4643
5005
|
#########
|
4644
|
-
- regex: ';
|
5006
|
+
- 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
5007
|
device_replacement: '$1'
|
4646
5008
|
brand_replacement: 'ZTE'
|
4647
5009
|
model_replacement: '$1'
|
4648
|
-
- regex: ';
|
5010
|
+
- regex: '; {0,2}([A-Z]\d+)_USA_[^;]{0,200}(?: Build|\) AppleWebKit)'
|
4649
5011
|
device_replacement: '$1'
|
4650
5012
|
brand_replacement: 'ZTE'
|
4651
5013
|
model_replacement: '$1'
|
4652
|
-
- regex: ';
|
5014
|
+
- regex: '; {0,2}(SmartTab\d+)[^;]{0,50}(?: Build|\) AppleWebKit)'
|
4653
5015
|
device_replacement: '$1'
|
4654
5016
|
brand_replacement: 'ZTE'
|
4655
5017
|
model_replacement: '$1'
|
4656
|
-
- regex: ';
|
5018
|
+
- regex: '; {0,2}(?:Blade|BLADE|ZTE-BLADE)([^;/]*)(?: Build|\) AppleWebKit)'
|
4657
5019
|
device_replacement: 'ZTE Blade$1'
|
4658
5020
|
brand_replacement: 'ZTE'
|
4659
5021
|
model_replacement: 'Blade$1'
|
4660
|
-
- regex: ';
|
5022
|
+
- regex: '; {0,2}(?:Skate|SKATE|ZTE-SKATE)([^;/]*)(?: Build|\) AppleWebKit)'
|
4661
5023
|
device_replacement: 'ZTE Skate$1'
|
4662
5024
|
brand_replacement: 'ZTE'
|
4663
5025
|
model_replacement: 'Skate$1'
|
4664
|
-
- regex: ';
|
5026
|
+
- regex: '; {0,2}(Orange |Optimus )(Monte Carlo|San Francisco)(?: Build|\) AppleWebKit)'
|
4665
5027
|
device_replacement: '$1$2'
|
4666
5028
|
brand_replacement: 'ZTE'
|
4667
5029
|
model_replacement: '$1$2'
|
4668
|
-
- regex: ';
|
5030
|
+
- regex: '; {0,2}(?:ZXY-ZTE_|ZTE\-U |ZTE[\- _]|ZTE-C[_ ])([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
4669
5031
|
device_replacement: 'ZTE $1'
|
4670
5032
|
brand_replacement: 'ZTE'
|
4671
5033
|
model_replacement: '$1'
|
4672
5034
|
# operator specific
|
4673
|
-
- regex: '; (BASE) (lutea|Lutea 2|Tab[^;]
|
5035
|
+
- regex: '; (BASE) (lutea|Lutea 2|Tab[^;]{0,200}?)(?: Build|\) AppleWebKit)'
|
4674
5036
|
device_replacement: '$1 $2'
|
4675
5037
|
brand_replacement: 'ZTE'
|
4676
5038
|
model_replacement: '$1 $2'
|
@@ -4679,7 +5041,7 @@ device_parsers:
|
|
4679
5041
|
device_replacement: '$1'
|
4680
5042
|
brand_replacement: 'ZTE'
|
4681
5043
|
model_replacement: '$1'
|
4682
|
-
- regex: ';
|
5044
|
+
- regex: '; {0,2}(vp9plus)\)'
|
4683
5045
|
device_replacement: '$1'
|
4684
5046
|
brand_replacement: 'ZTE'
|
4685
5047
|
model_replacement: '$1'
|
@@ -4739,7 +5101,7 @@ device_parsers:
|
|
4739
5101
|
device_replacement: 'Kindle Fire HDX 8.9" 4G'
|
4740
5102
|
brand_replacement: 'Amazon'
|
4741
5103
|
model_replacement: 'Kindle Fire HDX 8.9" 4G'
|
4742
|
-
- regex: '; ?Amazon ([^;/]
|
5104
|
+
- regex: '; ?Amazon ([^;/]{1,100}) Build\b'
|
4743
5105
|
device_replacement: '$1'
|
4744
5106
|
brand_replacement: 'Amazon'
|
4745
5107
|
model_replacement: '$1'
|
@@ -4762,22 +5124,22 @@ device_parsers:
|
|
4762
5124
|
|
4763
5125
|
#########
|
4764
5126
|
# Devices from chinese manufacturer(s)
|
4765
|
-
# @note: identified by x-wap-profile http://218.249.47.94/Xianghe
|
5127
|
+
# @note: identified by x-wap-profile http://218.249.47.94/Xianghe/.{0,200}
|
4766
5128
|
#########
|
4767
|
-
- regex: '(sprd)\-([^/]
|
5129
|
+
- regex: '(sprd)\-([^/]{1,50})/'
|
4768
5130
|
device_replacement: '$1 $2'
|
4769
5131
|
brand_replacement: '$1'
|
4770
5132
|
model_replacement: '$2'
|
4771
5133
|
# @ref: http://eshinechina.en.alibaba.com/
|
4772
|
-
- regex: ';
|
5134
|
+
- regex: '; {0,2}(H\d{2}00\+?) Build'
|
4773
5135
|
device_replacement: '$1'
|
4774
5136
|
brand_replacement: 'Hero'
|
4775
5137
|
model_replacement: '$1'
|
4776
|
-
- regex: ';
|
5138
|
+
- regex: '; {0,2}(iphone|iPhone5) Build/'
|
4777
5139
|
device_replacement: 'Xianghe $1'
|
4778
5140
|
brand_replacement: 'Xianghe'
|
4779
5141
|
model_replacement: '$1'
|
4780
|
-
- regex: ';
|
5142
|
+
- regex: '; {0,2}(e\d{4}[a-z]?_?v\d+|v89_[^;/]{1,100})[^;/]{1,30} Build/'
|
4781
5143
|
device_replacement: 'Xianghe $1'
|
4782
5144
|
brand_replacement: 'Xianghe'
|
4783
5145
|
model_replacement: '$1'
|
@@ -4799,7 +5161,7 @@ device_parsers:
|
|
4799
5161
|
#########
|
4800
5162
|
# Alcatel Windows Phones
|
4801
5163
|
#########
|
4802
|
-
- regex: 'Windows Phone [^;]
|
5164
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:ALCATEL)[^;]{0,200}; {0,2}([^;,\)]+)'
|
4803
5165
|
device_replacement: 'Alcatel $1'
|
4804
5166
|
brand_replacement: 'Alcatel'
|
4805
5167
|
model_replacement: '$1'
|
@@ -4807,8 +5169,7 @@ device_parsers:
|
|
4807
5169
|
#########
|
4808
5170
|
# Asus Windows Phones
|
4809
5171
|
#########
|
4810
|
-
|
4811
|
-
- regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:ASUS|Asus)[^;]*; *([^;,\)]+)'
|
5172
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:ASUS|Asus)[^;]{0,200}; {0,2}([^;,\)]+)'
|
4812
5173
|
device_replacement: 'Asus $1'
|
4813
5174
|
brand_replacement: 'Asus'
|
4814
5175
|
model_replacement: '$1'
|
@@ -4816,7 +5177,7 @@ device_parsers:
|
|
4816
5177
|
#########
|
4817
5178
|
# Dell Windows Phones
|
4818
5179
|
#########
|
4819
|
-
- regex: 'Windows Phone [^;]
|
5180
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:DELL|Dell)[^;]{0,200}; {0,2}([^;,\)]+)'
|
4820
5181
|
device_replacement: 'Dell $1'
|
4821
5182
|
brand_replacement: 'Dell'
|
4822
5183
|
model_replacement: '$1'
|
@@ -4824,7 +5185,7 @@ device_parsers:
|
|
4824
5185
|
#########
|
4825
5186
|
# HTC Windows Phones
|
4826
5187
|
#########
|
4827
|
-
- regex: 'Windows Phone [^;]
|
5188
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:HTC|Htc|HTC_blocked[^;]{0,200})[^;]{0,200}; {0,2}(?:HTC|)([^;,\)]+)'
|
4828
5189
|
device_replacement: 'HTC $1'
|
4829
5190
|
brand_replacement: 'HTC'
|
4830
5191
|
model_replacement: '$1'
|
@@ -4832,7 +5193,7 @@ device_parsers:
|
|
4832
5193
|
#########
|
4833
5194
|
# Huawei Windows Phones
|
4834
5195
|
#########
|
4835
|
-
- regex: 'Windows Phone [^;]
|
5196
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:HUAWEI)[^;]{0,200}; {0,2}(?:HUAWEI |)([^;,\)]+)'
|
4836
5197
|
device_replacement: 'Huawei $1'
|
4837
5198
|
brand_replacement: 'Huawei'
|
4838
5199
|
model_replacement: '$1'
|
@@ -4840,7 +5201,7 @@ device_parsers:
|
|
4840
5201
|
#########
|
4841
5202
|
# LG Windows Phones
|
4842
5203
|
#########
|
4843
|
-
- regex: 'Windows Phone [^;]
|
5204
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:LG|Lg)[^;]{0,200}; {0,2}(?:LG[ \-]|)([^;,\)]+)'
|
4844
5205
|
device_replacement: 'LG $1'
|
4845
5206
|
brand_replacement: 'LG'
|
4846
5207
|
model_replacement: '$1'
|
@@ -4848,15 +5209,15 @@ device_parsers:
|
|
4848
5209
|
#########
|
4849
5210
|
# Noka Windows Phones
|
4850
5211
|
#########
|
4851
|
-
- regex: 'Windows Phone [^;]
|
5212
|
+
- 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
5213
|
device_replacement: 'Lumia $1'
|
4853
5214
|
brand_replacement: 'Nokia'
|
4854
5215
|
model_replacement: 'Lumia $1'
|
4855
|
-
- regex: 'Windows Phone [^;]
|
5216
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:NOKIA|Nokia)[^;]{0,200}; {0,2}(RM-\d{3,})'
|
4856
5217
|
device_replacement: 'Nokia $1'
|
4857
5218
|
brand_replacement: 'Nokia'
|
4858
5219
|
model_replacement: '$1'
|
4859
|
-
- regex: '(?:Windows Phone [^;]
|
5220
|
+
- regex: '(?:Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)]|WPDesktop;) ?(?:ARM; ?Touch; ?|Touch; ?|)(?:NOKIA|Nokia)[^;]{0,200}; {0,2}(?:NOKIA ?|Nokia ?|LUMIA ?|[Ll]umia ?|)([^;\)]+)'
|
4860
5221
|
device_replacement: 'Nokia $1'
|
4861
5222
|
brand_replacement: 'Nokia'
|
4862
5223
|
model_replacement: '$1'
|
@@ -4864,7 +5225,7 @@ device_parsers:
|
|
4864
5225
|
#########
|
4865
5226
|
# Microsoft Windows Phones
|
4866
5227
|
#########
|
4867
|
-
- regex: 'Windows Phone [^;]
|
5228
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:Microsoft(?: Corporation|))[^;]{0,200}; {0,2}([^;,\)]+)'
|
4868
5229
|
device_replacement: 'Microsoft $1'
|
4869
5230
|
brand_replacement: 'Microsoft'
|
4870
5231
|
model_replacement: '$1'
|
@@ -4872,7 +5233,7 @@ device_parsers:
|
|
4872
5233
|
#########
|
4873
5234
|
# Samsung Windows Phones
|
4874
5235
|
#########
|
4875
|
-
- regex: 'Windows Phone [^;]
|
5236
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:SAMSUNG)[^;]{0,200}; {0,2}(?:SAMSUNG |)([^;,\.\)]+)'
|
4876
5237
|
device_replacement: 'Samsung $1'
|
4877
5238
|
brand_replacement: 'Samsung'
|
4878
5239
|
model_replacement: '$1'
|
@@ -4880,7 +5241,7 @@ device_parsers:
|
|
4880
5241
|
#########
|
4881
5242
|
# Toshiba Windows Phones
|
4882
5243
|
#########
|
4883
|
-
- regex: 'Windows Phone [^;]
|
5244
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:TOSHIBA|FujitsuToshibaMobileCommun)[^;]{0,200}; {0,2}([^;,\)]+)'
|
4884
5245
|
device_replacement: 'Toshiba $1'
|
4885
5246
|
brand_replacement: 'Toshiba'
|
4886
5247
|
model_replacement: '$1'
|
@@ -4888,7 +5249,7 @@ device_parsers:
|
|
4888
5249
|
#########
|
4889
5250
|
# Generic Windows Phones
|
4890
5251
|
#########
|
4891
|
-
- regex: 'Windows Phone [^;]
|
5252
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)([^;]{1,200}); {0,2}([^;,\)]+)'
|
4892
5253
|
device_replacement: '$1 $2'
|
4893
5254
|
brand_replacement: '$1'
|
4894
5255
|
model_replacement: '$2'
|
@@ -4900,7 +5261,7 @@ device_parsers:
|
|
4900
5261
|
#########
|
4901
5262
|
# Samsung Bada Phones
|
4902
5263
|
#########
|
4903
|
-
- regex: '(?:^|; )SAMSUNG\-([A-Za-z0-9\-]
|
5264
|
+
- regex: '(?:^|; )SAMSUNG\-([A-Za-z0-9\-]{1,50}).{0,200} Bada/'
|
4904
5265
|
device_replacement: 'Samsung $1'
|
4905
5266
|
brand_replacement: 'Samsung'
|
4906
5267
|
model_replacement: '$1'
|
@@ -4908,11 +5269,11 @@ device_parsers:
|
|
4908
5269
|
#########
|
4909
5270
|
# Firefox OS
|
4910
5271
|
#########
|
4911
|
-
- regex: '\(Mobile; ALCATEL ?(One|ONE) ?(Touch|TOUCH) ?([^;/]
|
5272
|
+
- regex: '\(Mobile; ALCATEL ?(One|ONE) ?(Touch|TOUCH) ?([^;/]{1,100}?)(?:/[^;]{1,200}|); rv:[^\)]{1,200}\) Gecko/[^\/]{1,200} Firefox/'
|
4912
5273
|
device_replacement: 'Alcatel $1 $2 $3'
|
4913
5274
|
brand_replacement: 'Alcatel'
|
4914
5275
|
model_replacement: 'One Touch $3'
|
4915
|
-
- regex: '\(Mobile; (?:ZTE([^;]
|
5276
|
+
- regex: '\(Mobile; (?:ZTE([^;]{1,200})|(OpenC)); rv:[^\)]{1,200}\) Gecko/[^\/]{1,200} Firefox/'
|
4916
5277
|
device_replacement: 'ZTE $1$2'
|
4917
5278
|
brand_replacement: 'ZTE'
|
4918
5279
|
model_replacement: '$1$2'
|
@@ -4920,15 +5281,15 @@ device_parsers:
|
|
4920
5281
|
#########
|
4921
5282
|
# KaiOS
|
4922
5283
|
#########
|
4923
|
-
- regex: '\(Mobile; ALCATEL([A-Za-z0-9\-]+); rv:[^\)]
|
5284
|
+
- regex: '\(Mobile; ALCATEL([A-Za-z0-9\-]+); rv:[^\)]{1,200}\) Gecko/[^\/]{1,200} Firefox/[^\/]{1,200} KaiOS/'
|
4924
5285
|
device_replacement: 'Alcatel $1'
|
4925
5286
|
brand_replacement: 'Alcatel'
|
4926
5287
|
model_replacement: '$1'
|
4927
|
-
- regex: '\(Mobile; LYF\/([A-Za-z0-9\-]
|
5288
|
+
- regex: '\(Mobile; LYF\/([A-Za-z0-9\-]{1,100})\/.{0,100};.{0,100}rv:[^\)]{1,100}\) Gecko/[^\/]{1,100} Firefox/[^\/]{1,100} KAIOS/'
|
4928
5289
|
device_replacement: 'LYF $1'
|
4929
5290
|
brand_replacement: 'LYF'
|
4930
5291
|
model_replacement: '$1'
|
4931
|
-
- regex: '\(Mobile; Nokia_([A-Za-z0-9\-]
|
5292
|
+
- regex: '\(Mobile; Nokia_([A-Za-z0-9\-]{1,100})_.{1,100}; rv:[^\)]{1,100}\) Gecko/[^\/]{1,100} Firefox/[^\/]{1,100} KAIOS/'
|
4932
5293
|
device_replacement: 'Nokia $1'
|
4933
5294
|
brand_replacement: 'Nokia'
|
4934
5295
|
model_replacement: '$1'
|
@@ -4941,7 +5302,7 @@ device_parsers:
|
|
4941
5302
|
device_replacement: 'Nokia $1'
|
4942
5303
|
brand_replacement: 'Nokia'
|
4943
5304
|
model_replacement: '$1$2'
|
4944
|
-
- regex: '(?:NOKIA|Nokia)(?:\-|
|
5305
|
+
- regex: '(?:NOKIA|Nokia)(?:\-| {0,2})(?:([A-Za-z0-9]+)\-[0-9a-f]{32}|([A-Za-z0-9\-]+)(?:UCBrowser)|([A-Za-z0-9\-]+))'
|
4945
5306
|
device_replacement: 'Nokia $1$2$3'
|
4946
5307
|
brand_replacement: 'Nokia'
|
4947
5308
|
model_replacement: '$1$2$3'
|
@@ -4950,12 +5311,12 @@ device_parsers:
|
|
4950
5311
|
brand_replacement: 'Nokia'
|
4951
5312
|
model_replacement: 'Lumia $1'
|
4952
5313
|
# UCWEB Browser on Symbian
|
4953
|
-
- regex: '\(Symbian; U; S60 V5; [A-z]{2}\-[A-z]{2}; (SonyEricsson|Samsung|Nokia|LG)([^;/]
|
5314
|
+
- regex: '\(Symbian; U; S60 V5; [A-z]{2}\-[A-z]{2}; (SonyEricsson|Samsung|Nokia|LG)([^;/]{1,100}?)\)'
|
4954
5315
|
device_replacement: '$1 $2'
|
4955
5316
|
brand_replacement: '$1'
|
4956
5317
|
model_replacement: '$2'
|
4957
5318
|
# Nokia Symbian
|
4958
|
-
- regex: '\(Symbian(?:/3|); U; ([^;]
|
5319
|
+
- regex: '\(Symbian(?:/3|); U; ([^;]{1,200});'
|
4959
5320
|
device_replacement: 'Nokia $1'
|
4960
5321
|
brand_replacement: 'Nokia'
|
4961
5322
|
model_replacement: '$1'
|
@@ -4968,7 +5329,7 @@ device_parsers:
|
|
4968
5329
|
device_replacement: 'BlackBerry $1'
|
4969
5330
|
brand_replacement: 'BlackBerry'
|
4970
5331
|
model_replacement: '$1'
|
4971
|
-
- regex: 'Play[Bb]ook
|
5332
|
+
- regex: 'Play[Bb]ook.{1,200}RIM Tablet OS'
|
4972
5333
|
device_replacement: 'BlackBerry Playbook'
|
4973
5334
|
brand_replacement: 'BlackBerry'
|
4974
5335
|
model_replacement: 'Playbook'
|
@@ -5000,7 +5361,7 @@ device_parsers:
|
|
5000
5361
|
device_replacement: 'Palm Treo $1'
|
5001
5362
|
brand_replacement: 'Palm'
|
5002
5363
|
model_replacement: 'Treo $1'
|
5003
|
-
- regex: 'webOS
|
5364
|
+
- regex: 'webOS.{0,200}(P160U(?:NA|))/(\d+).(\d+)'
|
5004
5365
|
device_replacement: 'HP Veer'
|
5005
5366
|
brand_replacement: 'HP'
|
5006
5367
|
model_replacement: 'Veer'
|
@@ -5008,7 +5369,7 @@ device_parsers:
|
|
5008
5369
|
device_replacement: 'HP TouchPad'
|
5009
5370
|
brand_replacement: 'HP'
|
5010
5371
|
model_replacement: 'TouchPad'
|
5011
|
-
- regex: 'HPiPAQ([A-Za-z0-9]
|
5372
|
+
- regex: 'HPiPAQ([A-Za-z0-9]{1,20})/\d+\.\d+'
|
5012
5373
|
device_replacement: 'HP iPAQ $1'
|
5013
5374
|
brand_replacement: 'HP'
|
5014
5375
|
model_replacement: 'iPAQ $1'
|
@@ -5076,18 +5437,18 @@ device_parsers:
|
|
5076
5437
|
brand_replacement: 'Apple'
|
5077
5438
|
model_replacement: 'iPhone'
|
5078
5439
|
# @note: desktop applications show device info
|
5079
|
-
- regex: 'CFNetwork
|
5440
|
+
- regex: 'CFNetwork/.{0,100} Darwin/\d.{0,100}\(((?:Mac|iMac|PowerMac|PowerBook)[^\d]*)(\d+)(?:,|%2C)(\d+)'
|
5080
5441
|
device_replacement: '$1$2,$3'
|
5081
5442
|
brand_replacement: 'Apple'
|
5082
5443
|
model_replacement: '$1$2,$3'
|
5083
5444
|
# @note: newer desktop applications don't show device info
|
5084
5445
|
# This is here so as to not have them recorded as iOS-Device
|
5085
|
-
- regex: 'CFNetwork
|
5446
|
+
- regex: 'CFNetwork/.{0,100} Darwin/\d+\.\d+\.\d+ \(x86_64\)'
|
5086
5447
|
device_replacement: 'Mac'
|
5087
5448
|
brand_replacement: 'Apple'
|
5088
5449
|
model_replacement: 'Mac'
|
5089
5450
|
# @note: iOS applications do not show device info
|
5090
|
-
- regex: 'CFNetwork
|
5451
|
+
- regex: 'CFNetwork/.{0,100} Darwin/\d'
|
5091
5452
|
device_replacement: 'iOS-Device'
|
5092
5453
|
brand_replacement: 'Apple'
|
5093
5454
|
model_replacement: 'iOS-Device'
|
@@ -5131,7 +5492,7 @@ device_parsers:
|
|
5131
5492
|
device_replacement: 'Asus $1'
|
5132
5493
|
brand_replacement: 'Asus'
|
5133
5494
|
model_replacement: '$1'
|
5134
|
-
- regex: '(?:asus
|
5495
|
+
- regex: '(?:asus.{0,200}?ASUS|Asus|ASUS|asus)[\- ;]*((?:Transformer (?:Pad|Prime) |Transformer |Padfone |Nexus[ _]|)[A-Za-z0-9]+)'
|
5135
5496
|
device_replacement: 'Asus $1'
|
5136
5497
|
brand_replacement: 'Asus'
|
5137
5498
|
model_replacement: '$1'
|
@@ -5164,11 +5525,11 @@ device_parsers:
|
|
5164
5525
|
device_replacement: 'DoCoMo $1'
|
5165
5526
|
brand_replacement: 'DoCoMo'
|
5166
5527
|
model_replacement: '$1'
|
5167
|
-
- regex: '([A-Za-z0-9]
|
5528
|
+
- regex: '^.{0,50}?([A-Za-z0-9]{1,30})_W;FOMA'
|
5168
5529
|
device_replacement: 'DoCoMo $1'
|
5169
5530
|
brand_replacement: 'DoCoMo'
|
5170
5531
|
model_replacement: '$1'
|
5171
|
-
- regex: '([A-Za-z0-9]
|
5532
|
+
- regex: '^.{0,50}?([A-Za-z0-9]{1,30});FOMA'
|
5172
5533
|
device_replacement: 'DoCoMo $1'
|
5173
5534
|
brand_replacement: 'DoCoMo'
|
5174
5535
|
model_replacement: '$1'
|
@@ -5176,7 +5537,7 @@ device_parsers:
|
|
5176
5537
|
##########
|
5177
5538
|
# htc
|
5178
5539
|
##########
|
5179
|
-
- regex: '\b(?:HTC/|HTC/[a-z0-9]
|
5540
|
+
- regex: '\b(?:HTC/|HTC/[a-z0-9]{1,20}/|)HTC[ _\-;]? {0,2}(.{0,200}?)(?:-?Mozilla|fingerPrint|[;/\(\)]|$)'
|
5180
5541
|
device_replacement: 'HTC $1'
|
5181
5542
|
brand_replacement: 'HTC'
|
5182
5543
|
model_replacement: '$1'
|
@@ -5237,18 +5598,18 @@ device_parsers:
|
|
5237
5598
|
device_replacement: '$1'
|
5238
5599
|
brand_replacement: '$2'
|
5239
5600
|
model_replacement: '$3'
|
5240
|
-
- regex: '(HbbTV)/1\.1\.1
|
5601
|
+
- regex: '(HbbTV)/1\.1\.1.{0,200}CE-HTML/1\.\d;(Vendor/|)(THOM[^;]{0,200}?)[;\s].{0,30}(LF[^;]{1,200});?'
|
5241
5602
|
device_replacement: '$1'
|
5242
5603
|
brand_replacement: 'Thomson'
|
5243
5604
|
model_replacement: '$4'
|
5244
|
-
- regex: '(HbbTV)(?:/1\.1\.1|) ?(?: \(;;;;;\)|);
|
5605
|
+
- regex: '(HbbTV)(?:/1\.1\.1|) ?(?: \(;;;;;\)|); {0,2}CE-HTML(?:/1\.\d|); {0,2}([^ ]{1,30}) ([^;]{1,200});'
|
5245
5606
|
device_replacement: '$1'
|
5246
5607
|
brand_replacement: '$2'
|
5247
5608
|
model_replacement: '$3'
|
5248
5609
|
- regex: '(HbbTV)/1\.1\.1 \(;;;;;\) Maple_2011'
|
5249
5610
|
device_replacement: '$1'
|
5250
5611
|
brand_replacement: 'Samsung'
|
5251
|
-
- regex: '(HbbTV)/[0-9]+\.[0-9]+\.[0-9]+ \([^;]{0,30}; ?(?:CUS:([^;]
|
5612
|
+
- regex: '(HbbTV)/[0-9]+\.[0-9]+\.[0-9]+ \([^;]{0,30}; ?(?:CUS:([^;]{0,200})|([^;]{1,200})) ?; ?([^;]{0,30})'
|
5252
5613
|
device_replacement: '$1'
|
5253
5614
|
brand_replacement: '$2$3'
|
5254
5615
|
model_replacement: '$4'
|
@@ -5258,7 +5619,7 @@ device_parsers:
|
|
5258
5619
|
##########
|
5259
5620
|
# LGE NetCast TV
|
5260
5621
|
##########
|
5261
|
-
- regex: 'LGE; (?:Media\/|)([^;]
|
5622
|
+
- regex: 'LGE; (?:Media\/|)([^;]{0,200});[^;]{0,200};[^;]{0,200};?\); "?LG NetCast(\.TV|\.Media|)-\d+'
|
5262
5623
|
device_replacement: 'NetCast$2'
|
5263
5624
|
brand_replacement: 'LG'
|
5264
5625
|
model_replacement: '$1'
|
@@ -5266,11 +5627,11 @@ device_parsers:
|
|
5266
5627
|
##########
|
5267
5628
|
# InettvBrowser
|
5268
5629
|
##########
|
5269
|
-
- regex: 'InettvBrowser/[0-9]
|
5630
|
+
- regex: 'InettvBrowser/[0-9]{1,30}\.[0-9A-Z]{1,30} \([^;]{0,200};(Sony)([^;]{0,200});[^;]{0,200};[^\)]{0,10}\)'
|
5270
5631
|
device_replacement: 'Inettv'
|
5271
5632
|
brand_replacement: '$1'
|
5272
5633
|
model_replacement: '$2'
|
5273
|
-
- regex: 'InettvBrowser/[0-9]
|
5634
|
+
- regex: 'InettvBrowser/[0-9]{1,30}\.[0-9A-Z]{1,30} \([^;]{0,200};([^;]{0,200});[^;]{0,200};[^\)]{0,10}\)'
|
5274
5635
|
device_replacement: 'Inettv'
|
5275
5636
|
brand_replacement: 'Generic_Inettv'
|
5276
5637
|
model_replacement: '$1'
|
@@ -5307,7 +5668,7 @@ device_parsers:
|
|
5307
5668
|
device_replacement: 'Microsoft $1'
|
5308
5669
|
brand_replacement: 'Microsoft'
|
5309
5670
|
model_replacement: '$1'
|
5310
|
-
- regex: '(?:MSIE|XBMC)
|
5671
|
+
- regex: '(?:MSIE|XBMC).{0,200}\b(Xbox)\b'
|
5311
5672
|
device_replacement: '$1'
|
5312
5673
|
brand_replacement: 'Microsoft'
|
5313
5674
|
model_replacement: '$1'
|
@@ -5331,6 +5692,15 @@ device_parsers:
|
|
5331
5692
|
device_replacement: 'Motorola $1'
|
5332
5693
|
brand_replacement: 'Motorola'
|
5333
5694
|
model_replacement: '$1'
|
5695
|
+
- regex: '; (moto[ a-zA-z0-9()]{0,50});((?: Build|.{0,50}\) AppleWebKit))'
|
5696
|
+
device_replacement: '$1'
|
5697
|
+
brand_replacement: 'Motorola'
|
5698
|
+
model_replacement: '$1'
|
5699
|
+
- regex: '; {0,2}(moto)(.{0,50})(?: Build|\) AppleWebKit)'
|
5700
|
+
device_replacement: 'Motorola$2'
|
5701
|
+
brand_replacement: 'Motorola'
|
5702
|
+
model_replacement: '$2'
|
5703
|
+
|
5334
5704
|
|
5335
5705
|
##########
|
5336
5706
|
# nintendo
|
@@ -5339,7 +5709,7 @@ device_parsers:
|
|
5339
5709
|
device_replacement: 'Nintendo Wii U'
|
5340
5710
|
brand_replacement: 'Nintendo'
|
5341
5711
|
model_replacement: 'Wii U'
|
5342
|
-
- regex: 'Nintendo (DS|3DS|DSi|Wii);'
|
5712
|
+
- regex: 'Nintendo (Switch|DS|3DS|DSi|Wii);'
|
5343
5713
|
device_replacement: 'Nintendo $1'
|
5344
5714
|
brand_replacement: 'Nintendo'
|
5345
5715
|
model_replacement: '$1'
|
@@ -5368,12 +5738,12 @@ device_parsers:
|
|
5368
5738
|
# Samsung
|
5369
5739
|
##########
|
5370
5740
|
# Samsung Smart-TV
|
5371
|
-
- regex: '(SMART-TV);
|
5741
|
+
- regex: '(SMART-TV); .{0,200} Tizen '
|
5372
5742
|
device_replacement: 'Samsung $1'
|
5373
5743
|
brand_replacement: 'Samsung'
|
5374
5744
|
model_replacement: '$1'
|
5375
5745
|
# Samsung Symbian Devices
|
5376
|
-
- regex: 'SymbianOS/9\.\d
|
5746
|
+
- regex: 'SymbianOS/9\.\d.{0,200} Samsung[/\-]([A-Za-z0-9 \-]+)'
|
5377
5747
|
device_replacement: 'Samsung $1'
|
5378
5748
|
brand_replacement: 'Samsung'
|
5379
5749
|
model_replacement: '$1'
|
@@ -5381,7 +5751,7 @@ device_parsers:
|
|
5381
5751
|
device_replacement: '$1 $2$3'
|
5382
5752
|
brand_replacement: '$1'
|
5383
5753
|
model_replacement: '$2-$3'
|
5384
|
-
- regex: 'SAMSUNG-ANDROID-MMS/([^;/]
|
5754
|
+
- regex: 'SAMSUNG-ANDROID-MMS/([^;/]{1,100})'
|
5385
5755
|
device_replacement: '$1'
|
5386
5756
|
brand_replacement: 'Samsung'
|
5387
5757
|
model_replacement: '$1'
|
@@ -5428,7 +5798,7 @@ device_parsers:
|
|
5428
5798
|
##########
|
5429
5799
|
# Sony
|
5430
5800
|
##########
|
5431
|
-
- regex: 'Android [^;]
|
5801
|
+
- regex: 'Android [^;]{1,200}; ([^ ]+) (Sony)/'
|
5432
5802
|
device_replacement: '$2 $1'
|
5433
5803
|
brand_replacement: '$2'
|
5434
5804
|
model_replacement: '$1'
|
@@ -5462,33 +5832,33 @@ device_parsers:
|
|
5462
5832
|
#########
|
5463
5833
|
# Android General Device Matching (far from perfect)
|
5464
5834
|
#########
|
5465
|
-
- regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; WOWMobile (
|
5835
|
+
- regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; WOWMobile (.{1,200})( Build[/ ]|\))'
|
5466
5836
|
brand_replacement: 'Generic_Android'
|
5467
5837
|
model_replacement: '$1'
|
5468
|
-
- regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{0,2}
|
5838
|
+
- regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{0,2} {0,2}; {0,2}(.{1,200}?)( Build[/ ]|\))'
|
5469
5839
|
brand_replacement: 'Generic_Android'
|
5470
5840
|
model_replacement: '$1'
|
5471
|
-
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|);
|
5841
|
+
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); {0,2}[A-Za-z]{2}[_\-][A-Za-z]{0,2}\-? {0,2}; {0,2}(.{1,200}?)( Build[/ ]|\))'
|
5472
5842
|
brand_replacement: 'Generic_Android'
|
5473
5843
|
model_replacement: '$1'
|
5474
|
-
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|);
|
5844
|
+
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); {0,2}[A-Za-z]{0,2}\- {0,2}; {0,2}(.{1,200}?)( Build[/ ]|\))'
|
5475
5845
|
brand_replacement: 'Generic_Android'
|
5476
5846
|
model_replacement: '$1'
|
5477
5847
|
# No build info at all - "Build" follows locale immediately
|
5478
|
-
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|);
|
5848
|
+
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); {0,2}[a-z]{0,2}[_\-]?[A-Za-z]{0,2};?( Build[/ ]|\))'
|
5479
5849
|
device_replacement: 'Generic Smartphone'
|
5480
5850
|
brand_replacement: 'Generic'
|
5481
5851
|
model_replacement: 'Smartphone'
|
5482
|
-
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|);
|
5852
|
+
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); {0,3}\-?[A-Za-z]{2}; {0,2}(.{1,50}?)( Build[/ ]|\))'
|
5483
5853
|
brand_replacement: 'Generic_Android'
|
5484
5854
|
model_replacement: '$1'
|
5485
|
-
- regex: 'Android \d+?(?:\.\d+|)(?:\.\d+|); ([^;]
|
5855
|
+
- regex: 'Android \d+?(?:\.\d+|)(?:\.\d+|); ([^;]{1,100}?)(?: Build|\) AppleWebKit).{1,200}? Mobile Safari'
|
5486
5856
|
brand_replacement: 'Generic_Android'
|
5487
5857
|
model_replacement: '$1'
|
5488
|
-
- regex: 'Android \d+?(?:\.\d+|)(?:\.\d+|); ([^;]
|
5858
|
+
- regex: 'Android \d+?(?:\.\d+|)(?:\.\d+|); ([^;]{1,100}?)(?: Build|\) AppleWebKit).{1,200}? Safari'
|
5489
5859
|
brand_replacement: 'Generic_Android_Tablet'
|
5490
5860
|
model_replacement: '$1'
|
5491
|
-
- regex: 'Android \d+?(?:\.\d+|)(?:\.\d+|); ([^;]
|
5861
|
+
- regex: 'Android \d+?(?:\.\d+|)(?:\.\d+|); ([^;]{1,100}?)(?: Build|\))'
|
5492
5862
|
brand_replacement: 'Generic_Android'
|
5493
5863
|
model_replacement: '$1'
|
5494
5864
|
|
@@ -5513,7 +5883,7 @@ device_parsers:
|
|
5513
5883
|
##########
|
5514
5884
|
# Generic Tablet
|
5515
5885
|
##########
|
5516
|
-
- regex: '(Android 3\.\d|Opera Tablet|Tablet;
|
5886
|
+
- regex: '(Android 3\.\d|Opera Tablet|Tablet; .{1,100}Firefox/|Android.{0,100}(?:Tab|Pad))'
|
5517
5887
|
regex_flag: 'i'
|
5518
5888
|
device_replacement: 'Generic Tablet'
|
5519
5889
|
brand_replacement: 'Generic'
|
@@ -5522,7 +5892,7 @@ device_parsers:
|
|
5522
5892
|
##########
|
5523
5893
|
# Generic Smart Phone
|
5524
5894
|
##########
|
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;
|
5895
|
+
- 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
5896
|
device_replacement: 'Generic Smartphone'
|
5527
5897
|
brand_replacement: 'Generic'
|
5528
5898
|
model_replacement: 'Smartphone'
|
@@ -5535,7 +5905,7 @@ device_parsers:
|
|
5535
5905
|
##########
|
5536
5906
|
# Spiders (this is a hack...)
|
5537
5907
|
##########
|
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
|
5908
|
+
- 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
5909
|
regex_flag: 'i'
|
5540
5910
|
device_replacement: 'Spider'
|
5541
5911
|
brand_replacement: 'Spider'
|