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