@hyperwatch/useragent 3.7.4 → 3.9.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.
- package/.github/dependabot.yml +7 -0
- package/.github/workflows/ci.yml +1 -1
- package/LICENSE +201 -0
- package/data/store/2021-03-21.json +1298 -0
- package/data/store/2021-03-22.json +2163 -0
- package/data/store/2021-03-23.json +119 -0
- package/package.json +9 -9
- package/regexes/core.json +1 -1
- package/regexes/core.yml +3 -1
- package/regexes/uap-core-agent.json +141 -64
- package/regexes/uap-core-device.json +558 -504
- package/regexes/uap-core-os.json +220 -69
- package/regexes/uap-core.yml +859 -642
- package/test/lib/useragent-core.json +20 -0
package/regexes/uap-core.yml
CHANGED
|
@@ -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+)|)'
|
|
@@ -95,7 +95,7 @@ user_agent_parsers:
|
|
|
95
95
|
family_replacement: 'Tableau'
|
|
96
96
|
|
|
97
97
|
# Adobe CreativeCloud
|
|
98
|
-
- regex: 'AppleWebKit/\d
|
|
98
|
+
- regex: 'AppleWebKit/\d{1,10}\.\d{1,10}.{0,200} Safari.{0,200} (CreativeCloud)/(\d+)\.(\d+).(\d+)'
|
|
99
99
|
family_replacement: 'Adobe CreativeCloud'
|
|
100
100
|
|
|
101
101
|
# Salesforce
|
|
@@ -110,7 +110,7 @@ user_agent_parsers:
|
|
|
110
110
|
family_replacement: 'FacebookBot'
|
|
111
111
|
|
|
112
112
|
# Google Plus
|
|
113
|
-
- regex: 'Google
|
|
113
|
+
- regex: 'Google.{0,50}/\+/web/snippet'
|
|
114
114
|
family_replacement: 'GooglePlusBot'
|
|
115
115
|
|
|
116
116
|
# Gmail
|
|
@@ -128,24 +128,24 @@ user_agent_parsers:
|
|
|
128
128
|
# Bots Pattern 'name/0.0.0'
|
|
129
129
|
- regex: '/((?:Ant-|)Nutch|[A-z]+[Bb]ot|[A-z]+[Ss]pider|Axtaris|fetchurl|Isara|ShopSalad|Tailsweep)[ \-](\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
|
|
130
130
|
# 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+)|)'
|
|
131
|
+
- 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
132
|
|
|
133
133
|
# MSIECrawler
|
|
134
|
-
- regex: '(MSIE) (\d+)\.(\d+)([a-z]\d|[a-z]|)
|
|
134
|
+
- regex: '(MSIE) (\d+)\.(\d+)([a-z]\d|[a-z]|);.{0,200} MSIECrawler'
|
|
135
135
|
family_replacement: 'MSIECrawler'
|
|
136
136
|
|
|
137
137
|
# DAVdroid
|
|
138
138
|
- regex: '(DAVdroid)/(\d+)\.(\d+)(?:\.(\d+)|)'
|
|
139
139
|
|
|
140
140
|
# 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+)|)|)'
|
|
141
|
+
- 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
142
|
|
|
143
143
|
# Pinterestbot
|
|
144
144
|
- regex: '(Pinterest(?:bot|))/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)[;\s(]+\+https://www.pinterest.com/bot.html'
|
|
145
145
|
family_replacement: 'Pinterestbot'
|
|
146
146
|
|
|
147
147
|
# 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+)|)|)|)'
|
|
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|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
149
|
|
|
150
150
|
# AWS S3 Clients
|
|
151
151
|
# must come before "Bots General matcher" to catch "boto"/"boto3" before "bot"
|
|
@@ -166,21 +166,22 @@ user_agent_parsers:
|
|
|
166
166
|
# Facebook
|
|
167
167
|
# Must come before "Bots General matcher" to catch OrangeBotswana
|
|
168
168
|
# Facebook Messenger must go before Facebook
|
|
169
|
-
- regex: '\[(FBAN/MessengerForiOS|FB_IAB/MESSENGER);FBAV/(\d+)(?:\.(\d+)(?:\.(\d+)|)|)'
|
|
169
|
+
- regex: '\[(FBAN/MessengerForiOS|FB_IAB/MESSENGER);FBAV/(\d+)(?:\.(\d+)(?:\.(\d+)(?:\.(\d+)|)|)|)'
|
|
170
|
+
|
|
170
171
|
family_replacement: 'Facebook Messenger'
|
|
171
172
|
# Facebook
|
|
172
|
-
- regex: '\[FB
|
|
173
|
+
- regex: '\[FB.{0,300};(FBAV)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
|
|
173
174
|
family_replacement: 'Facebook'
|
|
174
175
|
# Sometimes Facebook does not specify a version (FBAV)
|
|
175
|
-
- regex: '\[FB
|
|
176
|
+
- regex: '\[FB.{0,300};'
|
|
176
177
|
family_replacement: 'Facebook'
|
|
177
178
|
|
|
178
179
|
# Bots General matcher 'name/0.0'
|
|
179
|
-
- regex: '(?:\/[A-Za-z0-9\.]
|
|
180
|
+
- 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
181
|
# 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+)|)|)'
|
|
182
|
+
- regex: '^.{0,200}?((?:[A-Za-z][A-Za-z0-9 -]{0,50}|)[^C][^Uu][Bb]ot)\b(?:(?:[ /]| v)(\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)'
|
|
182
183
|
# 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+)|)|)'
|
|
184
|
+
- 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
185
|
|
|
185
186
|
# HbbTV standard defines what features the browser should understand.
|
|
186
187
|
# but it's like targeting "HTML5 browsers", effective browser support depends on the model
|
|
@@ -196,32 +197,32 @@ user_agent_parsers:
|
|
|
196
197
|
|
|
197
198
|
# Social Networks (non-Facebook)
|
|
198
199
|
# Pinterest
|
|
199
|
-
- regex: '\[(Pinterest)/[^\]]
|
|
200
|
+
- regex: '\[(Pinterest)/[^\]]{1,50}\]'
|
|
200
201
|
- regex: '(Pinterest)(?: for Android(?: Tablet|)|)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
|
|
201
202
|
# Instagram app
|
|
202
|
-
- regex: 'Mozilla
|
|
203
|
+
- regex: 'Mozilla.{1,200}Mobile.{1,100}(Instagram).(\d+)\.(\d+)\.(\d+)'
|
|
203
204
|
# Flipboard app
|
|
204
|
-
- regex: 'Mozilla
|
|
205
|
+
- regex: 'Mozilla.{1,200}Mobile.{1,100}(Flipboard).(\d+)\.(\d+)\.(\d+)'
|
|
205
206
|
# Flipboard-briefing app
|
|
206
|
-
- regex: 'Mozilla
|
|
207
|
+
- regex: 'Mozilla.{1,200}Mobile.{1,100}(Flipboard-Briefing).(\d+)\.(\d+)\.(\d+)'
|
|
207
208
|
# Onefootball app
|
|
208
|
-
- regex: 'Mozilla
|
|
209
|
+
- regex: 'Mozilla.{1,200}Mobile.{1,100}(Onefootball)\/Android.(\d+)\.(\d+)\.(\d+)'
|
|
209
210
|
# Snapchat
|
|
210
211
|
- regex: '(Snapchat)\/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
|
211
212
|
# Twitter
|
|
212
213
|
- regex: '(Twitter for (?:iPhone|iPad)|TwitterAndroid)(?:\/(\d+)\.(\d+)|)'
|
|
213
214
|
family_replacement: 'Twitter'
|
|
214
215
|
|
|
216
|
+
# Phantom app
|
|
217
|
+
- regex: 'Mozilla.{1,200}Mobile.{1,100}(Phantom\/ios|android).(\d+)\.(\d+)\.(\d+)'
|
|
218
|
+
family_replacement: 'Phantom'
|
|
219
|
+
|
|
215
220
|
# aspiegel.com spider (owned by Huawei)
|
|
216
|
-
- regex: 'Mozilla
|
|
221
|
+
- regex: 'Mozilla.{1,100}Mobile.{1,100}AspiegelBot'
|
|
217
222
|
family_replacement: 'Spider'
|
|
218
|
-
brand_replacement: 'Spider'
|
|
219
|
-
model_replacement: 'Smartphone'
|
|
220
223
|
|
|
221
224
|
- regex: 'AspiegelBot'
|
|
222
225
|
family_replacement: 'Spider'
|
|
223
|
-
brand_replacement: 'Spider'
|
|
224
|
-
model_replacement: 'Desktop'
|
|
225
226
|
|
|
226
227
|
# Basilisk
|
|
227
228
|
- regex: '(Firefox)/(\d+)\.(\d+) Basilisk/(\d+)'
|
|
@@ -238,7 +239,7 @@ user_agent_parsers:
|
|
|
238
239
|
family_replacement: 'Firefox Mobile'
|
|
239
240
|
- regex: '(Fennec)/(\d+)\.(\d+)'
|
|
240
241
|
family_replacement: 'Firefox Mobile'
|
|
241
|
-
- regex: '(?:Mobile|Tablet)
|
|
242
|
+
- regex: '(?:Mobile|Tablet);.{0,200}(Firefox)/(\d+)\.(\d+)'
|
|
242
243
|
family_replacement: 'Firefox Mobile'
|
|
243
244
|
- regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)\.(\d+(?:pre|))'
|
|
244
245
|
family_replacement: 'Firefox ($1)'
|
|
@@ -252,7 +253,7 @@ user_agent_parsers:
|
|
|
252
253
|
family_replacement: 'Firefox Beta'
|
|
253
254
|
- regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)([ab]\d+[a-z]*|)'
|
|
254
255
|
family_replacement: 'Firefox ($1)'
|
|
255
|
-
- regex: '(Firefox)
|
|
256
|
+
- regex: '(Firefox).{0,200}Tablet browser (\d+)\.(\d+)\.(\d+)'
|
|
256
257
|
family_replacement: 'MicroB'
|
|
257
258
|
- regex: '(MozillaDeveloperPreview)/(\d+)\.(\d+)([ab]\d+[a-z]*|)'
|
|
258
259
|
- regex: '(FxiOS)/(\d+)\.(\d+)(\.(\d+)|)(\.(\d+)|)'
|
|
@@ -284,24 +285,24 @@ user_agent_parsers:
|
|
|
284
285
|
|
|
285
286
|
# Opera will stop at 9.80 and hide the real version in the Version string.
|
|
286
287
|
# see: http://dev.opera.com/articles/view/opera-ua-string-changes/
|
|
287
|
-
- regex: '(Opera Tablet)
|
|
288
|
+
- regex: '(Opera Tablet).{0,200}Version/(\d+)\.(\d+)(?:\.(\d+)|)'
|
|
288
289
|
- regex: '(Opera Mini)(?:/att|)/?(\d+|)(?:\.(\d+)|)(?:\.(\d+)|)'
|
|
289
|
-
- regex: '(Opera)
|
|
290
|
+
- regex: '(Opera)/.{1,100}Opera Mobi.{1,100}Version/(\d+)\.(\d+)'
|
|
290
291
|
family_replacement: 'Opera Mobile'
|
|
291
|
-
- regex: '(Opera)/(\d+)\.(\d+)
|
|
292
|
+
- regex: '(Opera)/(\d+)\.(\d+).{1,100}Opera Mobi'
|
|
292
293
|
family_replacement: 'Opera Mobile'
|
|
293
|
-
- regex: 'Opera Mobi
|
|
294
|
+
- regex: 'Opera Mobi.{1,100}(Opera)(?:/|\s+)(\d+)\.(\d+)'
|
|
294
295
|
family_replacement: 'Opera Mobile'
|
|
295
296
|
- regex: 'Opera Mobi'
|
|
296
297
|
family_replacement: 'Opera Mobile'
|
|
297
|
-
- regex: '(Opera)/9.80
|
|
298
|
+
- regex: '(Opera)/9.80.{0,200}Version/(\d+)\.(\d+)(?:\.(\d+)|)'
|
|
298
299
|
|
|
299
300
|
# Opera 14 for Android uses a WebKit render engine.
|
|
300
|
-
- regex: '(?:Mobile Safari)
|
|
301
|
+
- regex: '(?:Mobile Safari).{1,300}(OPR)/(\d+)\.(\d+)\.(\d+)'
|
|
301
302
|
family_replacement: 'Opera Mobile'
|
|
302
303
|
|
|
303
304
|
# Opera >=15 for Desktop is similar to Chrome but includes an "OPR" Version string.
|
|
304
|
-
- regex: '(?:Chrome)
|
|
305
|
+
- regex: '(?:Chrome).{1,300}(OPR)/(\d+)\.(\d+)\.(\d+)'
|
|
305
306
|
family_replacement: 'Opera'
|
|
306
307
|
|
|
307
308
|
# Opera Coast
|
|
@@ -313,7 +314,7 @@ user_agent_parsers:
|
|
|
313
314
|
family_replacement: 'Opera Mini'
|
|
314
315
|
|
|
315
316
|
# Opera Neon
|
|
316
|
-
- regex: 'Chrome
|
|
317
|
+
- regex: 'Chrome/.{1,200}( MMS)/(\d+).(\d+).(\d+)'
|
|
317
318
|
family_replacement: 'Opera Neon'
|
|
318
319
|
|
|
319
320
|
# Palm WebOS looks a lot like Safari.
|
|
@@ -360,7 +361,7 @@ user_agent_parsers:
|
|
|
360
361
|
|
|
361
362
|
- regex: '(Symphony) (\d+).(\d+)'
|
|
362
363
|
|
|
363
|
-
- regex: 'PLAYSTATION 3
|
|
364
|
+
- regex: 'PLAYSTATION 3.{1,200}WebKit'
|
|
364
365
|
family_replacement: 'NetFront NX'
|
|
365
366
|
- regex: 'PLAYSTATION 3'
|
|
366
367
|
family_replacement: 'NetFront'
|
|
@@ -369,7 +370,7 @@ user_agent_parsers:
|
|
|
369
370
|
- regex: '(PlayStation Vita)'
|
|
370
371
|
family_replacement: 'NetFront NX'
|
|
371
372
|
|
|
372
|
-
- regex: 'AppleWebKit
|
|
373
|
+
- regex: 'AppleWebKit.{1,200} (NX)/(\d+)\.(\d+)\.(\d+)'
|
|
373
374
|
family_replacement: 'NetFront NX'
|
|
374
375
|
- regex: '(Nintendo 3DS)'
|
|
375
376
|
family_replacement: 'NetFront NX'
|
|
@@ -382,9 +383,9 @@ user_agent_parsers:
|
|
|
382
383
|
- regex: '(Puffin)/(\d+)\.(\d+)(?:\.(\d+)|)'
|
|
383
384
|
|
|
384
385
|
# Edge Mobile
|
|
385
|
-
- regex: 'Windows Phone
|
|
386
|
+
- regex: 'Windows Phone .{0,200}(Edge)/(\d+)\.(\d+)'
|
|
386
387
|
family_replacement: 'Edge Mobile'
|
|
387
|
-
- regex: '(EdgiOS|EdgA)/(\d+)\.(\d+)\.(\d+)
|
|
388
|
+
- regex: '(EdgiOS|EdgA)/(\d+)\.(\d+)\.(\d+)(?:\.(\d+)|)'
|
|
388
389
|
family_replacement: 'Edge Mobile'
|
|
389
390
|
|
|
390
391
|
# Samsung Internet (based on Chrome, but lacking some features)
|
|
@@ -430,7 +431,7 @@ user_agent_parsers:
|
|
|
430
431
|
family_replacement: 'TopBuzz'
|
|
431
432
|
|
|
432
433
|
# Google Search App on Android, eg:
|
|
433
|
-
- regex: 'Mozilla
|
|
434
|
+
- regex: 'Mozilla.{1,200}Android.{1,200}(GSA)/(\d+)\.(\d+)\.(\d+)'
|
|
434
435
|
family_replacement: 'Google'
|
|
435
436
|
|
|
436
437
|
# QQ Browsers
|
|
@@ -441,10 +442,18 @@ user_agent_parsers:
|
|
|
441
442
|
- regex: '(QQBrowser)(?:/(\d+)(?:\.(\d+)\.(\d+)(?:\.(\d+)|)|)|)'
|
|
442
443
|
family_replacement: 'QQ Browser'
|
|
443
444
|
|
|
445
|
+
# DuckDuckGo
|
|
446
|
+
- regex: 'Mobile.{0,200}(DuckDuckGo)/(\d+)'
|
|
447
|
+
family_replacement: 'DuckDuckGo Mobile'
|
|
448
|
+
|
|
449
|
+
# Tenta Browser
|
|
450
|
+
- regex: '(Tenta/)(\d+)\.(\d+)\.(\d+)'
|
|
451
|
+
family_replacement: 'Tenta Browser'
|
|
452
|
+
|
|
444
453
|
# Chrome Mobile
|
|
445
|
-
- regex: 'Version
|
|
454
|
+
- regex: 'Version/.{1,300}(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
|
446
455
|
family_replacement: 'Chrome Mobile WebView'
|
|
447
|
-
- regex: '; wv\)
|
|
456
|
+
- regex: '; wv\).{1,300}(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
|
448
457
|
family_replacement: 'Chrome Mobile WebView'
|
|
449
458
|
- regex: '(CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
|
450
459
|
family_replacement: 'Chrome Mobile'
|
|
@@ -452,7 +461,7 @@ user_agent_parsers:
|
|
|
452
461
|
family_replacement: 'Chrome Mobile iOS'
|
|
453
462
|
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+) Mobile(?:[ /]|$)'
|
|
454
463
|
family_replacement: 'Chrome Mobile'
|
|
455
|
-
- regex: ' Mobile
|
|
464
|
+
- regex: ' Mobile .{1,300}(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
|
456
465
|
family_replacement: 'Chrome Mobile'
|
|
457
466
|
|
|
458
467
|
# Chrome Frame must come before MSIE.
|
|
@@ -482,7 +491,7 @@ user_agent_parsers:
|
|
|
482
491
|
family_replacement: 'Yandex Browser'
|
|
483
492
|
|
|
484
493
|
# Mail.ru Amigo/Internet Browser (Chromium-based)
|
|
485
|
-
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)
|
|
494
|
+
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+).{0,100} MRCHROME'
|
|
486
495
|
family_replacement: 'Mail.ru Chromium Browser'
|
|
487
496
|
|
|
488
497
|
# AOL Browser (IE-based)
|
|
@@ -509,6 +518,13 @@ user_agent_parsers:
|
|
|
509
518
|
# @ref: http://www.ghost.org
|
|
510
519
|
- regex: '(Ghost)/(\d+)\.(\d+)\.(\d+)'
|
|
511
520
|
|
|
521
|
+
# Palo Alto GlobalProtect Linux
|
|
522
|
+
- regex: 'PAN (GlobalProtect)/(\d+)\.(\d+)\.(\d+) .{1,100} \(X11; Linux x86_64\)'
|
|
523
|
+
|
|
524
|
+
# Surveyon https://www.surveyon.com/
|
|
525
|
+
- regex: '^(surveyon)/(\d+)\.(\d+)\.(\d+)'
|
|
526
|
+
family_replacement: 'Surveyon'
|
|
527
|
+
|
|
512
528
|
#### END SPECIAL CASES TOP ####
|
|
513
529
|
|
|
514
530
|
#### MAIN CASES - this catches > 50% of all browsers ####
|
|
@@ -549,7 +565,7 @@ user_agent_parsers:
|
|
|
549
565
|
- regex: 'Microsoft Office (Word) 2014'
|
|
550
566
|
|
|
551
567
|
# Windows Live Mail
|
|
552
|
-
- regex: 'Outlook-Express\/7\.0
|
|
568
|
+
- regex: 'Outlook-Express\/7\.0'
|
|
553
569
|
family_replacement: 'Windows Live Mail'
|
|
554
570
|
|
|
555
571
|
# Apple Air Mail
|
|
@@ -589,7 +605,7 @@ user_agent_parsers:
|
|
|
589
605
|
family_replacement: 'Brave'
|
|
590
606
|
|
|
591
607
|
# Iron Browser ~since version 50
|
|
592
|
-
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)[\d.]
|
|
608
|
+
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)[\d.]{0,100} Iron[^/]'
|
|
593
609
|
family_replacement: 'Iron'
|
|
594
610
|
|
|
595
611
|
# Dolphin Browser
|
|
@@ -665,13 +681,13 @@ user_agent_parsers:
|
|
|
665
681
|
- regex: '^(HTC) Streaming Player \S+ / \S+ / \S+ / (\d+)\.(\d+)(?:\.(\d+)|)'
|
|
666
682
|
- regex: '^(Stitcher)/iOS'
|
|
667
683
|
- regex: '^(Stitcher)/Android'
|
|
668
|
-
- regex: '^(VLC)
|
|
684
|
+
- regex: '^(VLC) .{0,200}version (\d+)\.(\d+)\.(\d+)'
|
|
669
685
|
- regex: ' (VLC) for'
|
|
670
686
|
- regex: '(vlc)/(\d+)\.(\d+)\.(\d+)'
|
|
671
687
|
family_replacement: 'VLC'
|
|
672
|
-
- regex: '^(foobar)\S
|
|
673
|
-
- regex: '^(Clementine)\S
|
|
674
|
-
- regex: '(amarok)/(
|
|
688
|
+
- regex: '^(foobar)\S{1,10}/(\d+)\.(\d+|)\.?([\da-z]+|)'
|
|
689
|
+
- regex: '^(Clementine)\S{1,10} (\d+)\.(\d+|)\.?(\d+|)'
|
|
690
|
+
- regex: '(amarok)/(\d+)\.(\d+|)\.?(\d+|)'
|
|
675
691
|
family_replacement: 'Amarok'
|
|
676
692
|
- regex: '(Custom)-Feed Reader'
|
|
677
693
|
|
|
@@ -705,7 +721,7 @@ user_agent_parsers:
|
|
|
705
721
|
|
|
706
722
|
# desktop mode
|
|
707
723
|
# http://www.anandtech.com/show/3982/windows-phone-7-review
|
|
708
|
-
- regex: '(MSIE) (\d+)\.(\d+)
|
|
724
|
+
- regex: '(MSIE) (\d+)\.(\d+).{0,100}XBLWP7'
|
|
709
725
|
family_replacement: 'IE Large Screen'
|
|
710
726
|
|
|
711
727
|
# Nextcloud desktop sync client
|
|
@@ -722,6 +738,17 @@ user_agent_parsers:
|
|
|
722
738
|
- regex: '(OC)/(\d+)\.(\d+)\.(\d+)\.(\d+) \(Skype for Business\)'
|
|
723
739
|
family_replacement: 'Skype'
|
|
724
740
|
|
|
741
|
+
# OpenVAS Scanner
|
|
742
|
+
- regex: '(OpenVAS)(?:-VT)?(?:[ \/](\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)'
|
|
743
|
+
family_replacement: 'OpenVAS Scanner'
|
|
744
|
+
|
|
745
|
+
# AnyConnect
|
|
746
|
+
- regex: '(AnyConnect)\/(\d+)(?:\.(\d+)(?:\.(\d+)|)|)'
|
|
747
|
+
|
|
748
|
+
# Monitis
|
|
749
|
+
- regex: 'compatible; monitis'
|
|
750
|
+
family_replacement: 'Monitis'
|
|
751
|
+
|
|
725
752
|
#### END MAIN CASES ####
|
|
726
753
|
|
|
727
754
|
#### SPECIAL CASES ####
|
|
@@ -758,15 +785,15 @@ user_agent_parsers:
|
|
|
758
785
|
family_replacement: 'TopBuzz'
|
|
759
786
|
|
|
760
787
|
# @note: iOS / OSX Applications
|
|
761
|
-
- regex: '(iPod|iPhone|iPad)
|
|
788
|
+
- regex: '(iPod|iPhone|iPad).{1,200}GSA/(\d+)\.(\d+)\.(\d+)(?:\.(\d+)|) Mobile'
|
|
762
789
|
family_replacement: 'Google'
|
|
763
|
-
- regex: '(iPod|iPhone|iPad)
|
|
790
|
+
- regex: '(iPod|iPhone|iPad).{1,200}Version/(\d+)\.(\d+)(?:\.(\d+)|).{1,200}[ +]Safari'
|
|
764
791
|
family_replacement: 'Mobile Safari'
|
|
765
|
-
- regex: '(iPod|iPod touch|iPhone|iPad)
|
|
792
|
+
- regex: '(iPod|iPod touch|iPhone|iPad);.{0,30}CPU.{0,30}OS[ +](\d+)_(\d+)(?:_(\d+)|).{0,30} AppleNews\/\d+\.\d+(?:\.\d+|)'
|
|
766
793
|
family_replacement: 'Mobile Safari UI/WKWebView'
|
|
767
|
-
- regex: '(iPod|iPhone|iPad)
|
|
794
|
+
- regex: '(iPod|iPhone|iPad).{1,200}Version/(\d+)\.(\d+)(?:\.(\d+)|)'
|
|
768
795
|
family_replacement: 'Mobile Safari UI/WKWebView'
|
|
769
|
-
- regex: '(iPod|iPod touch|iPhone|iPad)
|
|
796
|
+
- regex: '(iPod|iPod touch|iPhone|iPad).{0,200} Safari'
|
|
770
797
|
family_replacement: 'Mobile Safari'
|
|
771
798
|
- regex: '(iPod|iPod touch|iPhone|iPad)'
|
|
772
799
|
family_replacement: 'Mobile Safari UI/WKWebView'
|
|
@@ -817,9 +844,9 @@ user_agent_parsers:
|
|
|
817
844
|
- regex: '(Nokia)[EN]?(\d+)'
|
|
818
845
|
|
|
819
846
|
# BlackBerry devices
|
|
820
|
-
- regex: '(PlayBook)
|
|
847
|
+
- regex: '(PlayBook).{1,200}RIM Tablet OS (\d+)\.(\d+)\.(\d+)'
|
|
821
848
|
family_replacement: 'BlackBerry WebKit'
|
|
822
|
-
- regex: '(Black[bB]erry|BB10)
|
|
849
|
+
- regex: '(Black[bB]erry|BB10).{1,200}Version/(\d+)\.(\d+)\.(\d+)'
|
|
823
850
|
family_replacement: 'BlackBerry WebKit'
|
|
824
851
|
- regex: '(Black[bB]erry)\s?(\d+)'
|
|
825
852
|
family_replacement: 'BlackBerry'
|
|
@@ -839,18 +866,15 @@ user_agent_parsers:
|
|
|
839
866
|
|
|
840
867
|
- regex: '(QtWeb) Internet Browser/(\d+)\.(\d+)'
|
|
841
868
|
|
|
842
|
-
#- regex: '\(iPad;.+(Version)/(\d+)\.(\d+)(?:\.(\d+)|).*Safari/'
|
|
843
|
-
# family_replacement: 'iPad'
|
|
844
|
-
|
|
845
869
|
# Phantomjs, should go before Safari
|
|
846
870
|
- regex: '(PhantomJS)/(\d+)\.(\d+)\.(\d+)'
|
|
847
871
|
|
|
848
872
|
# WebKit Nightly
|
|
849
|
-
- regex: '(AppleWebKit)/(\d+)(?:\.(\d+)|)\+
|
|
873
|
+
- regex: '(AppleWebKit)/(\d+)(?:\.(\d+)|)\+ .{0,200} Safari'
|
|
850
874
|
family_replacement: 'WebKit Nightly'
|
|
851
875
|
|
|
852
876
|
# Safari
|
|
853
|
-
- regex: '(Version)/(\d+)\.(\d+)(?:\.(\d+)|)
|
|
877
|
+
- regex: '(Version)/(\d+)\.(\d+)(?:\.(\d+)|).{0,100}Safari/'
|
|
854
878
|
family_replacement: 'Safari'
|
|
855
879
|
# Safari didn't provide "Version/d.d.d" prior to 3.0
|
|
856
880
|
- regex: '(Safari)/\d+'
|
|
@@ -906,7 +930,30 @@ user_agent_parsers:
|
|
|
906
930
|
family_replacement: 'Python Requests'
|
|
907
931
|
|
|
908
932
|
# headless user-agents
|
|
909
|
-
- 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+)|)|)'
|
|
933
|
+
- 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)(?:[ /](\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)'
|
|
934
|
+
|
|
935
|
+
# CloudFoundry
|
|
936
|
+
- regex: '^(cf)\/(\d+)\.(\d+)\.(\S+)'
|
|
937
|
+
family_replacement: 'CloudFoundry'
|
|
938
|
+
|
|
939
|
+
# SAP Leonardo
|
|
940
|
+
- regex: '^(sap-leonardo-iot-sdk-nodejs) \/ (\d+)\.(\d+)\.(\d+)'
|
|
941
|
+
|
|
942
|
+
# SAP Netweaver Application Server
|
|
943
|
+
- regex: '^(SAP NetWeaver Application Server) \(1.0;(\d{1})(\d{2})\)'
|
|
944
|
+
|
|
945
|
+
# HttpClient
|
|
946
|
+
- regex: '^(\w+-HTTPClient)\/(\d+)\.(\d+)-(\S+)'
|
|
947
|
+
family_replacement: 'HTTPClient'
|
|
948
|
+
|
|
949
|
+
# go-cli
|
|
950
|
+
- regex: '^(go-cli)\s(\d+)\.(\d+).(\S+)'
|
|
951
|
+
|
|
952
|
+
# Other Clients with the pattern <Name>/[v]<Major>.<Minor>[.<Patch>]
|
|
953
|
+
- regex: '^(Java-EurekaClient|Java-EurekaClient-Replication|HTTPClient|lua-resty-http)\/v?(\d+)\.(\d+)\.?(\d*)'
|
|
954
|
+
|
|
955
|
+
## Clints with the pattern <Name>
|
|
956
|
+
- regex: '^(ping-service|sap xsuaa|Node-oauth|Site24x7|SAP CPI|JAEGER_SECURITY)'
|
|
910
957
|
|
|
911
958
|
# Asynchronous HTTP Client/Server for asyncio and Python (https://aiohttp.readthedocs.io/)
|
|
912
959
|
- regex: '(Python/3\.\d{1,3} aiohttp)/(\d+)\.(\d+)\.(\d+)'
|
|
@@ -914,9 +961,25 @@ user_agent_parsers:
|
|
|
914
961
|
|
|
915
962
|
- regex: '(Java)[/ ]?\d+\.(\d+)\.(\d+)[_-]*([a-zA-Z0-9]+|)'
|
|
916
963
|
|
|
964
|
+
# minio-go (https://github.com/minio/minio-go)
|
|
965
|
+
- regex: '(minio-go)/v(\d+)\.(\d+)\.(\d+)'
|
|
966
|
+
|
|
967
|
+
# ureq - minimal request library in rust (https://github.com/algesten/ureq)
|
|
968
|
+
- regex: '^(ureq)[/ ](\d+)\.(\d+).(\d+)'
|
|
969
|
+
|
|
970
|
+
# http.rb - HTTP (The Gem! a.k.a. http.rb) - a fast Ruby HTTP client
|
|
971
|
+
# (https://github.com/httprb/http/blob/3aa7470288deb81f7d7b982c1e2381871049dcbb/lib/http/request.rb#L27)
|
|
972
|
+
- regex: '^(http\.rb)/(\d+)\.(\d+).(\d+)'
|
|
973
|
+
|
|
974
|
+
# Guzzle, PHP HTTP client (https://docs.guzzlephp.org/)
|
|
975
|
+
- regex: '^(GuzzleHttp)/(\d+)\.(\d+).(\d+)'
|
|
976
|
+
|
|
977
|
+
# lorien/grab - Web Scraping Framework (https://github.com/lorien/grab)
|
|
978
|
+
- regex: '^(grab)\b'
|
|
979
|
+
|
|
917
980
|
# Cloud Storage Clients
|
|
918
981
|
- regex: '^(Cyberduck)/(\d+)\.(\d+)\.(\d+)(?:\.\d+|)'
|
|
919
|
-
- regex: '^(S3 Browser) (\d+)
|
|
982
|
+
- regex: '^(S3 Browser) (\d+)[.-](\d+)[.-](\d+)(?:\s*https?://s3browser\.com|)'
|
|
920
983
|
- regex: '(S3Gof3r)'
|
|
921
984
|
# IBM COS (Cloud Object Storage) API
|
|
922
985
|
- regex: '\b(ibm-cos-sdk-(?:core|java|js|python))/(\d+)\.(\d+)(?:\.(\d+)|)'
|
|
@@ -939,6 +1002,20 @@ user_agent_parsers:
|
|
|
939
1002
|
- regex: '^(ViaFree|Viafree)-(?:tvOS-)?[A-Z]{2}/(\d+)\.(\d+)\.(\d+)'
|
|
940
1003
|
family_replacement: 'ViaFree'
|
|
941
1004
|
|
|
1005
|
+
# Transmit (https://library.panic.com/transmit/)
|
|
1006
|
+
- regex: '(Transmit)/(\d+)\.(\d+)\.(\d+)'
|
|
1007
|
+
|
|
1008
|
+
# Download Master (https://downloadmaster.ru/)
|
|
1009
|
+
- regex: '(Download Master)'
|
|
1010
|
+
|
|
1011
|
+
# HTTrack crawler
|
|
1012
|
+
- regex: '\b(HTTrack) (\d+)\.(\d+)(?:[\.\-](\d+)|)'
|
|
1013
|
+
|
|
1014
|
+
# SerenityOS (https://serenityos.org)
|
|
1015
|
+
# https://github.com/SerenityOS/serenity/blob/2e1bbcb0faeae92d7595b8e0b022a8cdcecca07e/Userland/Libraries/LibWeb/Loader/ResourceLoader.h#L27
|
|
1016
|
+
- regex: 'SerenityOS'
|
|
1017
|
+
family_replacement: 'SerenityOS Browser'
|
|
1018
|
+
|
|
942
1019
|
os_parsers:
|
|
943
1020
|
##########
|
|
944
1021
|
# HbbTV vendors
|
|
@@ -954,7 +1031,7 @@ os_parsers:
|
|
|
954
1031
|
# Opera/9.80 (Linux armv7l; HbbTV/1.1.1 (; Sony; KDL32W650A; PKG3.211EUA; 2013;); ) Presto/2.12.362 Version/12.11
|
|
955
1032
|
# Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Sony; KDL40HX751; PKG1.902EUA; 2012;);; en) Presto/2.10.250 Version/11.60
|
|
956
1033
|
# Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Sony; KDL22EX320; PKG4.017EUA; 2011;);; en) Presto/2.7.61 Version/11.00
|
|
957
|
-
#- regex: 'HbbTV/\d+\.\d+\.\d+ \(; (Sony)
|
|
1034
|
+
#- regex: 'HbbTV/\d+\.\d+\.\d+ \(; (Sony);.{0,200};.{0,200}; ([0-9]{4});\)'
|
|
958
1035
|
|
|
959
1036
|
# LG is consistent too, but we need to add manually the year model
|
|
960
1037
|
#Mozilla/5.0 (Unknown; Linux armv7l) AppleWebKit/537.1+ (KHTML, like Gecko) Safari/537.1+ HbbTV/1.1.1 ( ;LGE ;NetCast 4.0 ;03.20.30 ;1.0M ;)
|
|
@@ -973,9 +1050,9 @@ os_parsers:
|
|
|
973
1050
|
os_replacement: 'Samsung'
|
|
974
1051
|
os_v1_replacement: '2011'
|
|
975
1052
|
# manage the two models of 2013
|
|
976
|
-
- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4})
|
|
1053
|
+
- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});.{0,200}FXPDEUC'
|
|
977
1054
|
os_v2_replacement: 'UE40F7000'
|
|
978
|
-
- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4})
|
|
1055
|
+
- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});.{0,200}MST12DEUC'
|
|
979
1056
|
os_v2_replacement: 'UE32F4500'
|
|
980
1057
|
# generic Samsung (works starting in 2012)
|
|
981
1058
|
#- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});'
|
|
@@ -983,26 +1060,26 @@ os_parsers:
|
|
|
983
1060
|
# Philips : not found any other way than a manual mapping
|
|
984
1061
|
# 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
|
|
985
1062
|
# 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
|
|
986
|
-
- regex: 'HbbTV/1\.1\.1 \(; (Philips)
|
|
1063
|
+
- regex: 'HbbTV/1\.1\.1 \(; (Philips);.{0,200}NETTV/4'
|
|
987
1064
|
os_v1_replacement: '2013'
|
|
988
|
-
- regex: 'HbbTV/1\.1\.1 \(; (Philips)
|
|
1065
|
+
- regex: 'HbbTV/1\.1\.1 \(; (Philips);.{0,200}NETTV/3'
|
|
989
1066
|
os_v1_replacement: '2012'
|
|
990
|
-
- regex: 'HbbTV/1\.1\.1 \(; (Philips)
|
|
1067
|
+
- regex: 'HbbTV/1\.1\.1 \(; (Philips);.{0,200}NETTV/2'
|
|
991
1068
|
os_v1_replacement: '2011'
|
|
992
1069
|
|
|
993
1070
|
# the HbbTV emulator developers use HbbTV/1.1.1 (;;;;;) firetv-firefox-plugin 1.1.20
|
|
994
|
-
- regex: 'HbbTV/\d+\.\d+\.\d
|
|
1071
|
+
- regex: 'HbbTV/\d+\.\d+\.\d+.{0,100}(firetv)-firefox-plugin (\d+).(\d+).(\d+)'
|
|
995
1072
|
os_replacement: 'FireHbbTV'
|
|
996
1073
|
|
|
997
1074
|
# generic HbbTV, hoping to catch manufacturer name (always after 2nd comma) and the first string that looks like a 2011-2019 year
|
|
998
|
-
- regex: 'HbbTV/\d+\.\d+\.\d+ \(
|
|
1075
|
+
- regex: 'HbbTV/\d+\.\d+\.\d+ \(.{0,30}; ?([a-zA-Z]+) ?;.{0,30}(201[1-9]).{0,30}\)'
|
|
999
1076
|
|
|
1000
1077
|
# aspiegel.com spider (owned by Huawei)
|
|
1001
1078
|
- regex: 'AspiegelBot'
|
|
1002
1079
|
os_replacement: 'Other'
|
|
1003
1080
|
|
|
1004
1081
|
##########
|
|
1005
|
-
# @note: Windows Phone needs to come before Windows NT 6.1
|
|
1082
|
+
# @note: Windows Phone needs to come before Windows NT 6.1 {0,2}and* before Android to catch cases such as:
|
|
1006
1083
|
# 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)...
|
|
1007
1084
|
# 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)...
|
|
1008
1085
|
# 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)...
|
|
@@ -1011,12 +1088,12 @@ os_parsers:
|
|
|
1011
1088
|
|
|
1012
1089
|
- regex: '(Windows Phone) (?:OS[ /])?(\d+)\.(\d+)'
|
|
1013
1090
|
|
|
1014
|
-
# Again a MS-special one: iPhone
|
|
1015
|
-
- regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+)|)
|
|
1091
|
+
# Again a MS-special one: iPhone.{0,200}Outlook-iOS-Android/x.x is erroneously detected as Android
|
|
1092
|
+
- regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+)|).{0,100}Outlook-iOS-Android'
|
|
1016
1093
|
os_replacement: 'iOS'
|
|
1017
1094
|
|
|
1018
1095
|
# Special case for old ArcGIS Mobile products
|
|
1019
|
-
- regex: 'ArcGIS\.?(iOS|Android)-\d+\.\d+(?:\.\d+|)(?:[^\/]
|
|
1096
|
+
- regex: 'ArcGIS\.?(iOS|Android)-\d+\.\d+(?:\.\d+|)(?:[^\/]{1,50}|)\/(\d+)(?:\.(\d+)(?:\.(\d+)|)|)'
|
|
1020
1097
|
|
|
1021
1098
|
# Special case for new ArcGIS Mobile products
|
|
1022
1099
|
- regex: 'ArcGISRuntime-(?:Android|iOS)\/\d+\.\d+(?:\.\d+|) \((Android|iOS) (\d+)(?:\.(\d+)(?:\.(\d+)|)|);'
|
|
@@ -1048,16 +1125,17 @@ os_parsers:
|
|
|
1048
1125
|
|
|
1049
1126
|
# Android 9; Android 10;
|
|
1050
1127
|
- regex: '(Android) (\d+);'
|
|
1128
|
+
- regex: '(Android): (\d+)(?:\.(\d+)(?:\.(\d+)|)|);'
|
|
1051
1129
|
|
|
1052
1130
|
# UCWEB
|
|
1053
|
-
- regex: '^UCWEB
|
|
1131
|
+
- regex: '^UCWEB.{0,200}; (Adr) (\d+)\.(\d+)(?:[.\-]([a-z0-9]{1,100})|);'
|
|
1054
1132
|
os_replacement: 'Android'
|
|
1055
|
-
- regex: '^UCWEB
|
|
1133
|
+
- regex: '^UCWEB.{0,200}; (iPad|iPh|iPd) OS (\d+)_(\d+)(?:_(\d+)|);'
|
|
1056
1134
|
os_replacement: 'iOS'
|
|
1057
|
-
- regex: '^UCWEB
|
|
1135
|
+
- regex: '^UCWEB.{0,200}; (wds) (\d+)\.(\d+)(?:\.(\d+)|);'
|
|
1058
1136
|
os_replacement: 'Windows Phone'
|
|
1059
1137
|
# JUC
|
|
1060
|
-
- regex: '^(JUC)
|
|
1138
|
+
- regex: '^(JUC).{0,200}; ?U; ?(?:Android|)(\d+)\.(\d+)(?:[\.\-]([a-z0-9]{1,100})|)'
|
|
1061
1139
|
os_replacement: 'Android'
|
|
1062
1140
|
|
|
1063
1141
|
# Salesforce
|
|
@@ -1075,7 +1153,7 @@ os_parsers:
|
|
|
1075
1153
|
# properly identify as Chrome OS
|
|
1076
1154
|
#
|
|
1077
1155
|
# 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
|
|
1078
|
-
- regex: '(x86_64|aarch64)\ (\d+)\.(\d+)\.(\d+)
|
|
1156
|
+
- regex: '(x86_64|aarch64)\ (\d+)\.(\d+)\.(\d+).{0,100}Chrome.{0,100}(?:CitrixChromeApp)$'
|
|
1079
1157
|
os_replacement: 'Chrome OS'
|
|
1080
1158
|
|
|
1081
1159
|
##########
|
|
@@ -1167,7 +1245,7 @@ os_parsers:
|
|
|
1167
1245
|
os_v1_replacement: '95'
|
|
1168
1246
|
|
|
1169
1247
|
# Box apps (Drive, Sync, Notes) on Windows https://www.box.com/resources/downloads
|
|
1170
|
-
- regex: '^Box
|
|
1248
|
+
- regex: '^Box.{0,200}Windows/([\d.]+);'
|
|
1171
1249
|
os_replacement: 'Windows'
|
|
1172
1250
|
os_v1_replacement: '$1'
|
|
1173
1251
|
|
|
@@ -1184,33 +1262,33 @@ os_parsers:
|
|
|
1184
1262
|
##########
|
|
1185
1263
|
- regex: '((?:Mac[ +]?|; )OS[ +]X)[\s+/](?:(\d+)[_.](\d+)(?:[_.](\d+)|)|Mach-O)'
|
|
1186
1264
|
os_replacement: 'Mac OS X'
|
|
1187
|
-
- regex: '
|
|
1265
|
+
- regex: 'Mac OS X\s.{1,50}\s(\d+).(\d+).(\d+)'
|
|
1188
1266
|
os_replacement: 'Mac OS X'
|
|
1189
1267
|
os_v1_replacement: '$1'
|
|
1190
1268
|
os_v2_replacement: '$2'
|
|
1191
1269
|
os_v3_replacement: '$3'
|
|
1192
1270
|
# Leopard
|
|
1193
|
-
- regex: ' (Dar)(win)/(9).(\d+)
|
|
1271
|
+
- regex: ' (Dar)(win)/(9).(\d+).{0,100}\((?:i386|x86_64|Power Macintosh)\)'
|
|
1194
1272
|
os_replacement: 'Mac OS X'
|
|
1195
1273
|
os_v1_replacement: '10'
|
|
1196
1274
|
os_v2_replacement: '5'
|
|
1197
1275
|
# Snow Leopard
|
|
1198
|
-
- regex: ' (Dar)(win)/(10).(\d+)
|
|
1276
|
+
- regex: ' (Dar)(win)/(10).(\d+).{0,100}\((?:i386|x86_64)\)'
|
|
1199
1277
|
os_replacement: 'Mac OS X'
|
|
1200
1278
|
os_v1_replacement: '10'
|
|
1201
1279
|
os_v2_replacement: '6'
|
|
1202
1280
|
# Lion
|
|
1203
|
-
- regex: ' (Dar)(win)/(11).(\d+)
|
|
1281
|
+
- regex: ' (Dar)(win)/(11).(\d+).{0,100}\((?:i386|x86_64)\)'
|
|
1204
1282
|
os_replacement: 'Mac OS X'
|
|
1205
1283
|
os_v1_replacement: '10'
|
|
1206
1284
|
os_v2_replacement: '7'
|
|
1207
1285
|
# Mountain Lion
|
|
1208
|
-
- regex: ' (Dar)(win)/(12).(\d+)
|
|
1286
|
+
- regex: ' (Dar)(win)/(12).(\d+).{0,100}\((?:i386|x86_64)\)'
|
|
1209
1287
|
os_replacement: 'Mac OS X'
|
|
1210
1288
|
os_v1_replacement: '10'
|
|
1211
1289
|
os_v2_replacement: '8'
|
|
1212
1290
|
# Mavericks
|
|
1213
|
-
- regex: ' (Dar)(win)/(13).(\d+)
|
|
1291
|
+
- regex: ' (Dar)(win)/(13).(\d+).{0,100}\((?:i386|x86_64)\)'
|
|
1214
1292
|
os_replacement: 'Mac OS X'
|
|
1215
1293
|
os_v1_replacement: '10'
|
|
1216
1294
|
os_v2_replacement: '9'
|
|
@@ -1227,7 +1305,7 @@ os_parsers:
|
|
|
1227
1305
|
- regex: '(?:PPC|Intel) (Mac OS X)'
|
|
1228
1306
|
|
|
1229
1307
|
# Box Drive and Box Sync on Mac OS X use OSX version numbers, not Darwin
|
|
1230
|
-
- regex: '^Box
|
|
1308
|
+
- regex: '^Box.{0,200};(Darwin)/(10)\.(1\d)(?:\.(\d+)|)'
|
|
1231
1309
|
os_replacement: 'Mac OS X'
|
|
1232
1310
|
|
|
1233
1311
|
##########
|
|
@@ -1238,7 +1316,7 @@ os_parsers:
|
|
|
1238
1316
|
- regex: '(Apple\s?TV)(?:/(\d+)\.(\d+)|)'
|
|
1239
1317
|
os_replacement: 'ATV OS X'
|
|
1240
1318
|
|
|
1241
|
-
- regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+)|)'
|
|
1319
|
+
- regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+)|)'
|
|
1242
1320
|
os_replacement: 'iOS'
|
|
1243
1321
|
|
|
1244
1322
|
# remaining cases are mostly only opera uas, so catch opera as to not catch iphone spoofs
|
|
@@ -1246,15 +1324,15 @@ os_parsers:
|
|
|
1246
1324
|
os_replacement: 'iOS'
|
|
1247
1325
|
|
|
1248
1326
|
# few more stragglers
|
|
1249
|
-
- regex: '(iPhone|iPad|iPod)
|
|
1327
|
+
- regex: '(iPhone|iPad|iPod).{0,100}Mac OS X.{0,100}Version/(\d+)\.(\d+)'
|
|
1250
1328
|
os_replacement: 'iOS'
|
|
1251
1329
|
|
|
1252
1330
|
# CFNetwork/Darwin - The specific CFNetwork or Darwin version determines
|
|
1253
1331
|
# whether the os maps to Mac OS, or iOS, or just Darwin.
|
|
1254
1332
|
# See: http://user-agents.me/cfnetwork-version-list
|
|
1255
|
-
- regex: '(CFNetwork)/(5)48\.0\.3
|
|
1333
|
+
- regex: '(CFNetwork)/(5)48\.0\.3.{0,100} Darwin/11\.0\.0'
|
|
1256
1334
|
os_replacement: 'iOS'
|
|
1257
|
-
- regex: '(CFNetwork)/(5)48\.(0)\.4
|
|
1335
|
+
- regex: '(CFNetwork)/(5)48\.(0)\.4.{0,100} Darwin/(1)1\.0\.0'
|
|
1258
1336
|
os_replacement: 'iOS'
|
|
1259
1337
|
- regex: '(CFNetwork)/(5)48\.(1)\.4'
|
|
1260
1338
|
os_replacement: 'iOS'
|
|
@@ -1289,17 +1367,17 @@ os_parsers:
|
|
|
1289
1367
|
os_replacement: 'Mac OS X'
|
|
1290
1368
|
os_v1_replacement: '10'
|
|
1291
1369
|
os_v2_replacement: '11'
|
|
1292
|
-
- regex: 'CFNetwork/7
|
|
1370
|
+
- regex: 'CFNetwork/7.{0,100} Darwin/15\.4\.\d+'
|
|
1293
1371
|
os_replacement: 'iOS'
|
|
1294
1372
|
os_v1_replacement: '9'
|
|
1295
1373
|
os_v2_replacement: '3'
|
|
1296
1374
|
os_v3_replacement: '1'
|
|
1297
|
-
- regex: 'CFNetwork/7
|
|
1375
|
+
- regex: 'CFNetwork/7.{0,100} Darwin/15\.5\.\d+'
|
|
1298
1376
|
os_replacement: 'iOS'
|
|
1299
1377
|
os_v1_replacement: '9'
|
|
1300
1378
|
os_v2_replacement: '3'
|
|
1301
1379
|
os_v3_replacement: '2'
|
|
1302
|
-
- regex: 'CFNetwork/7
|
|
1380
|
+
- regex: 'CFNetwork/7.{0,100} Darwin/15\.6\.\d+'
|
|
1303
1381
|
os_replacement: 'iOS'
|
|
1304
1382
|
os_v1_replacement: '9'
|
|
1305
1383
|
os_v2_replacement: '3'
|
|
@@ -1320,15 +1398,15 @@ os_parsers:
|
|
|
1320
1398
|
# CFNetwork macOS Apps (must be before CFNetwork iOS Apps
|
|
1321
1399
|
# @ref: https://en.wikipedia.org/wiki/Darwin_(operating_system)#Release_history
|
|
1322
1400
|
##########
|
|
1323
|
-
- regex: 'CFNetwork
|
|
1401
|
+
- regex: 'CFNetwork/.{0,100} Darwin/17\.\d+.{0,100}\(x86_64\)'
|
|
1324
1402
|
os_replacement: 'Mac OS X'
|
|
1325
1403
|
os_v1_replacement: '10'
|
|
1326
1404
|
os_v2_replacement: '13'
|
|
1327
|
-
- regex: 'CFNetwork
|
|
1405
|
+
- regex: 'CFNetwork/.{0,100} Darwin/16\.\d+.{0,100}\(x86_64\)'
|
|
1328
1406
|
os_replacement: 'Mac OS X'
|
|
1329
1407
|
os_v1_replacement: '10'
|
|
1330
1408
|
os_v2_replacement: '12'
|
|
1331
|
-
- regex: 'CFNetwork/8
|
|
1409
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/15\.\d+.{0,100}\(x86_64\)'
|
|
1332
1410
|
os_replacement: 'Mac OS X'
|
|
1333
1411
|
os_v1_replacement: '10'
|
|
1334
1412
|
os_v2_replacement: '11'
|
|
@@ -1336,87 +1414,185 @@ os_parsers:
|
|
|
1336
1414
|
# CFNetwork iOS Apps
|
|
1337
1415
|
# @ref: https://en.wikipedia.org/wiki/Darwin_(operating_system)#Release_history
|
|
1338
1416
|
##########
|
|
1339
|
-
- regex: 'CFNetwork
|
|
1417
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(9)\.\d+'
|
|
1340
1418
|
os_replacement: 'iOS'
|
|
1341
1419
|
os_v1_replacement: '1'
|
|
1342
|
-
- regex: 'CFNetwork
|
|
1420
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(10)\.\d+'
|
|
1343
1421
|
os_replacement: 'iOS'
|
|
1344
1422
|
os_v1_replacement: '4'
|
|
1345
|
-
- regex: 'CFNetwork
|
|
1423
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(11)\.\d+'
|
|
1346
1424
|
os_replacement: 'iOS'
|
|
1347
1425
|
os_v1_replacement: '5'
|
|
1348
|
-
- regex: 'CFNetwork
|
|
1426
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(13)\.\d+'
|
|
1349
1427
|
os_replacement: 'iOS'
|
|
1350
1428
|
os_v1_replacement: '6'
|
|
1351
|
-
- regex: 'CFNetwork/6
|
|
1429
|
+
- regex: 'CFNetwork/6.{0,100} Darwin/(14)\.\d+'
|
|
1352
1430
|
os_replacement: 'iOS'
|
|
1353
1431
|
os_v1_replacement: '7'
|
|
1354
|
-
- regex: 'CFNetwork/7
|
|
1432
|
+
- regex: 'CFNetwork/7.{0,100} Darwin/(14)\.\d+'
|
|
1355
1433
|
os_replacement: 'iOS'
|
|
1356
1434
|
os_v1_replacement: '8'
|
|
1357
1435
|
os_v2_replacement: '0'
|
|
1358
|
-
- regex: 'CFNetwork/7
|
|
1436
|
+
- regex: 'CFNetwork/7.{0,100} Darwin/(15)\.\d+'
|
|
1359
1437
|
os_replacement: 'iOS'
|
|
1360
1438
|
os_v1_replacement: '9'
|
|
1361
1439
|
os_v2_replacement: '0'
|
|
1362
|
-
- regex: 'CFNetwork/8
|
|
1440
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/16\.5\.\d+'
|
|
1363
1441
|
os_replacement: 'iOS'
|
|
1364
1442
|
os_v1_replacement: '10'
|
|
1365
1443
|
os_v2_replacement: '3'
|
|
1366
|
-
- regex: 'CFNetwork/8
|
|
1444
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/16\.6\.\d+'
|
|
1367
1445
|
os_replacement: 'iOS'
|
|
1368
1446
|
os_v1_replacement: '10'
|
|
1369
1447
|
os_v2_replacement: '3'
|
|
1370
1448
|
os_v3_replacement: '2'
|
|
1371
|
-
- regex: 'CFNetwork/8
|
|
1449
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/16\.7\.\d+'
|
|
1372
1450
|
os_replacement: 'iOS'
|
|
1373
1451
|
os_v1_replacement: '10'
|
|
1374
1452
|
os_v2_replacement: '3'
|
|
1375
1453
|
os_v3_replacement: '3'
|
|
1376
|
-
- regex: 'CFNetwork/8
|
|
1454
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/(16)\.\d+'
|
|
1377
1455
|
os_replacement: 'iOS'
|
|
1378
1456
|
os_v1_replacement: '10'
|
|
1379
|
-
- regex: 'CFNetwork/8
|
|
1457
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/17\.0\.\d+'
|
|
1380
1458
|
os_replacement: 'iOS'
|
|
1381
1459
|
os_v1_replacement: '11'
|
|
1382
1460
|
os_v2_replacement: '0'
|
|
1383
|
-
- regex: 'CFNetwork/8
|
|
1461
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/17\.2\.\d+'
|
|
1384
1462
|
os_replacement: 'iOS'
|
|
1385
1463
|
os_v1_replacement: '11'
|
|
1386
1464
|
os_v2_replacement: '1'
|
|
1387
|
-
- regex: 'CFNetwork/8
|
|
1465
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/17\.3\.\d+'
|
|
1388
1466
|
os_replacement: 'iOS'
|
|
1389
1467
|
os_v1_replacement: '11'
|
|
1390
1468
|
os_v2_replacement: '2'
|
|
1391
|
-
- regex: 'CFNetwork/8
|
|
1469
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/17\.4\.\d+'
|
|
1392
1470
|
os_replacement: 'iOS'
|
|
1393
1471
|
os_v1_replacement: '11'
|
|
1394
1472
|
os_v2_replacement: '2'
|
|
1395
1473
|
os_v3_replacement: '6'
|
|
1396
|
-
- regex: 'CFNetwork/8
|
|
1474
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/17\.5\.\d+'
|
|
1397
1475
|
os_replacement: 'iOS'
|
|
1398
1476
|
os_v1_replacement: '11'
|
|
1399
1477
|
os_v2_replacement: '3'
|
|
1400
|
-
- regex: 'CFNetwork/9
|
|
1478
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/17\.6\.\d+'
|
|
1401
1479
|
os_replacement: 'iOS'
|
|
1402
1480
|
os_v1_replacement: '11'
|
|
1403
1481
|
os_v2_replacement: '4'
|
|
1404
|
-
- regex: 'CFNetwork/9
|
|
1482
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/17\.7\.\d+'
|
|
1405
1483
|
os_replacement: 'iOS'
|
|
1406
1484
|
os_v1_replacement: '11'
|
|
1407
1485
|
os_v2_replacement: '4'
|
|
1408
1486
|
os_v3_replacement: '1'
|
|
1409
|
-
- regex: 'CFNetwork/8
|
|
1487
|
+
- regex: 'CFNetwork/8.{0,100} Darwin/(17)\.\d+'
|
|
1410
1488
|
os_replacement: 'iOS'
|
|
1411
1489
|
os_v1_replacement: '11'
|
|
1412
|
-
- regex: 'CFNetwork/9
|
|
1490
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/18\.0\.\d+'
|
|
1413
1491
|
os_replacement: 'iOS'
|
|
1414
1492
|
os_v1_replacement: '12'
|
|
1415
1493
|
os_v2_replacement: '0'
|
|
1416
|
-
- regex: 'CFNetwork/9
|
|
1494
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/18\.2\.\d+'
|
|
1495
|
+
os_replacement: 'iOS'
|
|
1496
|
+
os_v1_replacement: '12'
|
|
1497
|
+
os_v2_replacement: '1'
|
|
1498
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/18\.5\.\d+'
|
|
1499
|
+
os_replacement: 'iOS'
|
|
1500
|
+
os_v1_replacement: '12'
|
|
1501
|
+
os_v2_replacement: '2'
|
|
1502
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/18\.6\.\d+'
|
|
1417
1503
|
os_replacement: 'iOS'
|
|
1418
1504
|
os_v1_replacement: '12'
|
|
1419
|
-
|
|
1505
|
+
os_v2_replacement: '3'
|
|
1506
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/18\.7\.\d+'
|
|
1507
|
+
os_replacement: 'iOS'
|
|
1508
|
+
os_v1_replacement: '12'
|
|
1509
|
+
os_v2_replacement: '4'
|
|
1510
|
+
- regex: 'CFNetwork/9.{0,100} Darwin/(18)\.\d+'
|
|
1511
|
+
os_replacement: 'iOS'
|
|
1512
|
+
os_v1_replacement: '12'
|
|
1513
|
+
- regex: 'CFNetwork/11.{0,100} Darwin/19\.2\.\d+'
|
|
1514
|
+
os_replacement: 'iOS'
|
|
1515
|
+
os_v1_replacement: '13'
|
|
1516
|
+
os_v2_replacement: '3'
|
|
1517
|
+
- regex: 'CFNetwork/11.{0,100} Darwin/19\.3\.\d+'
|
|
1518
|
+
os_replacement: 'iOS'
|
|
1519
|
+
os_v1_replacement: '13'
|
|
1520
|
+
os_v2_replacement: '3'
|
|
1521
|
+
os_v3_replacement: '1'
|
|
1522
|
+
- regex: 'CFNetwork/11.{0,100} Darwin/19\.4\.\d+'
|
|
1523
|
+
os_replacement: 'iOS'
|
|
1524
|
+
os_v1_replacement: '13'
|
|
1525
|
+
os_v2_replacement: '4'
|
|
1526
|
+
- regex: 'CFNetwork/11.{0,100} Darwin/19\.5\.\d+'
|
|
1527
|
+
os_replacement: 'iOS'
|
|
1528
|
+
os_v1_replacement: '13'
|
|
1529
|
+
os_v2_replacement: '5'
|
|
1530
|
+
- regex: 'CFNetwork/11.{0,100} Darwin/19\.6\.\d+'
|
|
1531
|
+
os_replacement: 'iOS'
|
|
1532
|
+
os_v1_replacement: '13'
|
|
1533
|
+
os_v2_replacement: '6'
|
|
1534
|
+
- regex: 'CFNetwork/1[01].{0,100} Darwin/19\.\d+'
|
|
1535
|
+
os_replacement: 'iOS'
|
|
1536
|
+
os_v1_replacement: '13'
|
|
1537
|
+
- regex: 'CFNetwork/12.{0,100} Darwin/20\.1\.\d+'
|
|
1538
|
+
os_replacement: 'iOS'
|
|
1539
|
+
os_v1_replacement: '14'
|
|
1540
|
+
os_v2_replacement: '2'
|
|
1541
|
+
- regex: 'CFNetwork/12.{0,100} Darwin/20\.2\.\d+'
|
|
1542
|
+
os_replacement: 'iOS'
|
|
1543
|
+
os_v1_replacement: '14'
|
|
1544
|
+
os_v2_replacement: '3'
|
|
1545
|
+
- regex: 'CFNetwork/12.{0,100} Darwin/20\.3\.\d+'
|
|
1546
|
+
os_replacement: 'iOS'
|
|
1547
|
+
os_v1_replacement: '14'
|
|
1548
|
+
os_v2_replacement: '4'
|
|
1549
|
+
- regex: 'CFNetwork/12.{0,100} Darwin/20\.4\.\d+'
|
|
1550
|
+
os_replacement: 'iOS'
|
|
1551
|
+
os_v1_replacement: '14'
|
|
1552
|
+
os_v2_replacement: '5'
|
|
1553
|
+
- regex: 'CFNetwork/12.{0,100} Darwin/20\.5\.\d+'
|
|
1554
|
+
os_replacement: 'iOS'
|
|
1555
|
+
os_v1_replacement: '14'
|
|
1556
|
+
os_v2_replacement: '6'
|
|
1557
|
+
- regex: 'CFNetwork/12.{0,100} Darwin/20\.6\.\d+'
|
|
1558
|
+
os_replacement: 'iOS'
|
|
1559
|
+
os_v1_replacement: '14'
|
|
1560
|
+
os_v2_replacement: '8'
|
|
1561
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(20)\.\d+'
|
|
1562
|
+
os_replacement: 'iOS'
|
|
1563
|
+
os_v1_replacement: '14'
|
|
1564
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.0\.\d+'
|
|
1565
|
+
os_replacement: 'iOS'
|
|
1566
|
+
os_v1_replacement: '15'
|
|
1567
|
+
os_v2_replacement: '0'
|
|
1568
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.1\.\d+'
|
|
1569
|
+
os_replacement: 'iOS'
|
|
1570
|
+
os_v1_replacement: '15'
|
|
1571
|
+
os_v2_replacement: '1'
|
|
1572
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.2\.\d+'
|
|
1573
|
+
os_replacement: 'iOS'
|
|
1574
|
+
os_v1_replacement: '15'
|
|
1575
|
+
os_v2_replacement: '2'
|
|
1576
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.3\.\d+'
|
|
1577
|
+
os_replacement: 'iOS'
|
|
1578
|
+
os_v1_replacement: '15'
|
|
1579
|
+
os_v2_replacement: '3'
|
|
1580
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.4\.\d+'
|
|
1581
|
+
os_replacement: 'iOS'
|
|
1582
|
+
os_v1_replacement: '15'
|
|
1583
|
+
os_v2_replacement: '4'
|
|
1584
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.5\.\d+'
|
|
1585
|
+
os_replacement: 'iOS'
|
|
1586
|
+
os_v1_replacement: '15'
|
|
1587
|
+
os_v2_replacement: '5'
|
|
1588
|
+
- regex: 'CFNetwork/13.{0,100} Darwin/21\.6\.\d+'
|
|
1589
|
+
os_replacement: 'iOS'
|
|
1590
|
+
os_v1_replacement: '15'
|
|
1591
|
+
os_v2_replacement: '6'
|
|
1592
|
+
- regex: 'CFNetwork/.{0,100} Darwin/(21)\.\d+'
|
|
1593
|
+
os_replacement: 'iOS'
|
|
1594
|
+
os_v1_replacement: '15'
|
|
1595
|
+
- regex: 'CFNetwork/.{0,100} Darwin/'
|
|
1420
1596
|
os_replacement: 'iOS'
|
|
1421
1597
|
|
|
1422
1598
|
# iOS Apps
|
|
@@ -1427,7 +1603,7 @@ os_parsers:
|
|
|
1427
1603
|
##########
|
|
1428
1604
|
# Apple Watch
|
|
1429
1605
|
##########
|
|
1430
|
-
- regex: '(watchOS)/(\d+)\.(\d+)(?:\.(\d+)|)'
|
|
1606
|
+
- regex: '(watchOS)[/ ](\d+)\.(\d+)(?:\.(\d+)|)'
|
|
1431
1607
|
os_replacement: 'WatchOS'
|
|
1432
1608
|
|
|
1433
1609
|
##########################
|
|
@@ -1470,9 +1646,9 @@ os_parsers:
|
|
|
1470
1646
|
##########
|
|
1471
1647
|
- regex: '(Symbian[Oo][Ss])[/ ](\d+)\.(\d+)'
|
|
1472
1648
|
os_replacement: 'Symbian OS'
|
|
1473
|
-
- regex: '(Symbian/3)
|
|
1649
|
+
- regex: '(Symbian/3).{1,200}NokiaBrowser/7\.3'
|
|
1474
1650
|
os_replacement: 'Symbian^3 Anna'
|
|
1475
|
-
- regex: '(Symbian/3)
|
|
1651
|
+
- regex: '(Symbian/3).{1,200}NokiaBrowser/7\.4'
|
|
1476
1652
|
os_replacement: 'Symbian^3 Belle'
|
|
1477
1653
|
- regex: '(Symbian/3)'
|
|
1478
1654
|
os_replacement: 'Symbian^3'
|
|
@@ -1489,11 +1665,11 @@ os_parsers:
|
|
|
1489
1665
|
##########
|
|
1490
1666
|
# BlackBerry devices
|
|
1491
1667
|
##########
|
|
1492
|
-
- regex: '(BB10)
|
|
1668
|
+
- regex: '(BB10);.{1,200}Version/(\d+)\.(\d+)\.(\d+)'
|
|
1493
1669
|
os_replacement: 'BlackBerry OS'
|
|
1494
1670
|
- regex: '(Black[Bb]erry)[0-9a-z]+/(\d+)\.(\d+)\.(\d+)(?:\.(\d+)|)'
|
|
1495
1671
|
os_replacement: 'BlackBerry OS'
|
|
1496
|
-
- regex: '(Black[Bb]erry)
|
|
1672
|
+
- regex: '(Black[Bb]erry).{1,200}Version/(\d+)\.(\d+)\.(\d+)(?:\.(\d+)|)'
|
|
1497
1673
|
os_replacement: 'BlackBerry OS'
|
|
1498
1674
|
- regex: '(RIM Tablet OS) (\d+)\.(\d+)\.(\d+)'
|
|
1499
1675
|
os_replacement: 'BlackBerry Tablet OS'
|
|
@@ -1511,44 +1687,44 @@ os_parsers:
|
|
|
1511
1687
|
##########
|
|
1512
1688
|
# Firefox OS
|
|
1513
1689
|
##########
|
|
1514
|
-
- regex: '\((?:Mobile|Tablet)
|
|
1690
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/18.0 Firefox/\d+\.\d+'
|
|
1515
1691
|
os_replacement: 'Firefox OS'
|
|
1516
1692
|
os_v1_replacement: '1'
|
|
1517
1693
|
os_v2_replacement: '0'
|
|
1518
1694
|
os_v3_replacement: '1'
|
|
1519
1695
|
|
|
1520
|
-
- regex: '\((?:Mobile|Tablet)
|
|
1696
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/18.1 Firefox/\d+\.\d+'
|
|
1521
1697
|
os_replacement: 'Firefox OS'
|
|
1522
1698
|
os_v1_replacement: '1'
|
|
1523
1699
|
os_v2_replacement: '1'
|
|
1524
1700
|
|
|
1525
|
-
- regex: '\((?:Mobile|Tablet)
|
|
1701
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/26.0 Firefox/\d+\.\d+'
|
|
1526
1702
|
os_replacement: 'Firefox OS'
|
|
1527
1703
|
os_v1_replacement: '1'
|
|
1528
1704
|
os_v2_replacement: '2'
|
|
1529
1705
|
|
|
1530
|
-
- regex: '\((?:Mobile|Tablet)
|
|
1706
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/28.0 Firefox/\d+\.\d+'
|
|
1531
1707
|
os_replacement: 'Firefox OS'
|
|
1532
1708
|
os_v1_replacement: '1'
|
|
1533
1709
|
os_v2_replacement: '3'
|
|
1534
1710
|
|
|
1535
|
-
- regex: '\((?:Mobile|Tablet)
|
|
1711
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/30.0 Firefox/\d+\.\d+'
|
|
1536
1712
|
os_replacement: 'Firefox OS'
|
|
1537
1713
|
os_v1_replacement: '1'
|
|
1538
1714
|
os_v2_replacement: '4'
|
|
1539
1715
|
|
|
1540
|
-
- regex: '\((?:Mobile|Tablet)
|
|
1716
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/32.0 Firefox/\d+\.\d+'
|
|
1541
1717
|
os_replacement: 'Firefox OS'
|
|
1542
1718
|
os_v1_replacement: '2'
|
|
1543
1719
|
os_v2_replacement: '0'
|
|
1544
1720
|
|
|
1545
|
-
- regex: '\((?:Mobile|Tablet)
|
|
1721
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Gecko/34.0 Firefox/\d+\.\d+'
|
|
1546
1722
|
os_replacement: 'Firefox OS'
|
|
1547
1723
|
os_v1_replacement: '2'
|
|
1548
1724
|
os_v2_replacement: '1'
|
|
1549
1725
|
|
|
1550
1726
|
# Firefox OS Generic
|
|
1551
|
-
- regex: '\((?:Mobile|Tablet)
|
|
1727
|
+
- regex: '\((?:Mobile|Tablet);.{1,200}Firefox/\d+\.\d+'
|
|
1552
1728
|
os_replacement: 'Firefox OS'
|
|
1553
1729
|
|
|
1554
1730
|
##########
|
|
@@ -1589,7 +1765,7 @@ os_parsers:
|
|
|
1589
1765
|
- regex: '(Fedora|Red Hat|PCLinuxOS|Puppy|Ubuntu|Kindle|Bada|Sailfish|Lubuntu|BackTrack|Slackware|(?:Free|Open|Net|\b)BSD)[/ ](\d+)\.(\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
|
|
1590
1766
|
|
|
1591
1767
|
# Gentoo Linux + Kernel Version
|
|
1592
|
-
- regex: '(Linux)[ /](\d+)\.(\d+)(?:\.(\d+)|)
|
|
1768
|
+
- regex: '(Linux)[ /](\d+)\.(\d+)(?:\.(\d+)|).{0,100}gentoo'
|
|
1593
1769
|
os_replacement: 'Gentoo'
|
|
1594
1770
|
|
|
1595
1771
|
# Opera Mini Bada
|
|
@@ -1597,7 +1773,7 @@ os_parsers:
|
|
|
1597
1773
|
|
|
1598
1774
|
# just os
|
|
1599
1775
|
- regex: '(Windows|Android|WeTab|Maemo|Web0S)'
|
|
1600
|
-
- regex: '(Ubuntu|Kubuntu|Arch Linux|CentOS|Slackware|Gentoo|openSUSE|SUSE|Red Hat|Fedora|PCLinuxOS|Mageia|(?:Free|Open|Net|\b)BSD)'
|
|
1776
|
+
- regex: '(Ubuntu|Kubuntu|Arch Linux|CentOS|Slackware|Gentoo|openSUSE|SUSE|Red Hat|Fedora|PCLinuxOS|Mageia|SerenityOS|(?:Free|Open|Net|\b)BSD)'
|
|
1601
1777
|
# Linux + Kernel Version
|
|
1602
1778
|
- regex: '(Linux)(?:[ /](\d+)\.(\d+)(?:\.(\d+)|)|)'
|
|
1603
1779
|
- regex: 'SunOS'
|
|
@@ -1620,19 +1796,19 @@ device_parsers:
|
|
|
1620
1796
|
# Mobile Spiders
|
|
1621
1797
|
# Catch the mobile crawler before checking for iPhones / Androids.
|
|
1622
1798
|
#########
|
|
1623
|
-
- regex: '(?:(?:iPhone|Windows CE|Windows Phone|Android)
|
|
1799
|
+
- 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)'
|
|
1624
1800
|
regex_flag: 'i'
|
|
1625
1801
|
device_replacement: 'Spider'
|
|
1626
1802
|
brand_replacement: 'Spider'
|
|
1627
1803
|
model_replacement: 'Smartphone'
|
|
1628
|
-
- regex: '(?:DoCoMo|\bMOT\b|\bLG\b|Nokia|Samsung|SonyEricsson)
|
|
1804
|
+
- 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)'
|
|
1629
1805
|
regex_flag: 'i'
|
|
1630
1806
|
device_replacement: 'Spider'
|
|
1631
1807
|
brand_replacement: 'Spider'
|
|
1632
1808
|
model_replacement: 'Feature Phone'
|
|
1633
1809
|
|
|
1634
1810
|
# PTST / WebPageTest.org crawlers
|
|
1635
|
-
- regex: ' PTST/\d+(
|
|
1811
|
+
- regex: ' PTST/\d+(?:\.\d+|)$'
|
|
1636
1812
|
device_replacement: 'Spider'
|
|
1637
1813
|
brand_replacement: 'Spider'
|
|
1638
1814
|
|
|
@@ -1642,11 +1818,11 @@ device_parsers:
|
|
|
1642
1818
|
brand_replacement: 'Spider'
|
|
1643
1819
|
|
|
1644
1820
|
# aspiegel.com spider (owned by Huawei)
|
|
1645
|
-
- regex: 'Mozilla
|
|
1821
|
+
- regex: 'Mozilla.{1,100}Mobile.{1,100}AspiegelBot'
|
|
1646
1822
|
device_replacement: 'Spider'
|
|
1647
1823
|
brand_replacement: 'Spider'
|
|
1648
1824
|
model_replacement: 'Smartphone'
|
|
1649
|
-
- regex: 'Mozilla
|
|
1825
|
+
- regex: 'Mozilla.{0,200}AspiegelBot'
|
|
1650
1826
|
device_replacement: 'Spider'
|
|
1651
1827
|
brand_replacement: 'Spider'
|
|
1652
1828
|
model_replacement: 'Desktop'
|
|
@@ -1655,7 +1831,7 @@ device_parsers:
|
|
|
1655
1831
|
# WebBrowser for SmartWatch
|
|
1656
1832
|
# @ref: https://play.google.com/store/apps/details?id=se.vaggan.webbrowser&hl=en
|
|
1657
1833
|
#########
|
|
1658
|
-
- regex: '\bSmartWatch {0,2}\( {0,2}([^;]
|
|
1834
|
+
- regex: '\bSmartWatch {0,2}\( {0,2}([^;]{1,200}) {0,2}; {0,2}([^;]{1,200}) {0,2};'
|
|
1659
1835
|
device_replacement: '$1 $2'
|
|
1660
1836
|
brand_replacement: '$1'
|
|
1661
1837
|
model_replacement: '$2'
|
|
@@ -1667,16 +1843,16 @@ device_parsers:
|
|
|
1667
1843
|
######################################################################
|
|
1668
1844
|
|
|
1669
1845
|
# Android Application
|
|
1670
|
-
- regex: 'Android Application[^\-]
|
|
1846
|
+
- regex: 'Android Application[^\-]{1,300} - (Sony) ?(Ericsson|) (.{1,200}) \w{1,20} - '
|
|
1671
1847
|
device_replacement: '$1 $2'
|
|
1672
1848
|
brand_replacement: '$1$2'
|
|
1673
1849
|
model_replacement: '$3'
|
|
1674
|
-
- regex: 'Android Application[^\-]
|
|
1850
|
+
- regex: 'Android Application[^\-]{1,300} - (?:HTC|HUAWEI|LGE|LENOVO|MEDION|TCT) (HTC|HUAWEI|LG|LENOVO|MEDION|ALCATEL)[ _\-](.{1,200}) \w{1,20} - '
|
|
1675
1851
|
regex_flag: 'i'
|
|
1676
1852
|
device_replacement: '$1 $2'
|
|
1677
1853
|
brand_replacement: '$1'
|
|
1678
1854
|
model_replacement: '$2'
|
|
1679
|
-
- regex: 'Android Application[^\-]
|
|
1855
|
+
- regex: 'Android Application[^\-]{1,300} - ([^ ]+) (.{1,200}) \w{1,20} - '
|
|
1680
1856
|
device_replacement: '$1 $2'
|
|
1681
1857
|
brand_replacement: '$1'
|
|
1682
1858
|
model_replacement: '$2'
|
|
@@ -1685,11 +1861,11 @@ device_parsers:
|
|
|
1685
1861
|
# 3Q
|
|
1686
1862
|
# @ref: http://www.3q-int.com/
|
|
1687
1863
|
#########
|
|
1688
|
-
- regex: ';
|
|
1864
|
+
- regex: '; {0,2}([BLRQ]C\d{4}[A-Z]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1689
1865
|
device_replacement: '3Q $1'
|
|
1690
1866
|
brand_replacement: '3Q'
|
|
1691
1867
|
model_replacement: '$1'
|
|
1692
|
-
- regex: ';
|
|
1868
|
+
- regex: '; {0,2}(?:3Q_)([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1693
1869
|
device_replacement: '3Q $1'
|
|
1694
1870
|
brand_replacement: '3Q'
|
|
1695
1871
|
model_replacement: '$1'
|
|
@@ -1698,19 +1874,19 @@ device_parsers:
|
|
|
1698
1874
|
# Acer
|
|
1699
1875
|
# @ref: http://us.acer.com/ac/en/US/content/group/tablets
|
|
1700
1876
|
#########
|
|
1701
|
-
- regex: 'Android [34]
|
|
1877
|
+
- 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)'
|
|
1702
1878
|
device_replacement: '$1'
|
|
1703
1879
|
brand_replacement: 'Acer'
|
|
1704
1880
|
model_replacement: '$1'
|
|
1705
|
-
- regex: ';
|
|
1881
|
+
- regex: '; {0,2}Acer Iconia Tab ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1706
1882
|
device_replacement: '$1'
|
|
1707
1883
|
brand_replacement: 'Acer'
|
|
1708
1884
|
model_replacement: '$1'
|
|
1709
|
-
- regex: ';
|
|
1885
|
+
- regex: '; {0,2}(Z1[1235]0|E320[^/]{0,10}|S500|S510|Liquid[^;/]{0,30}|Iconia A\d+)(?: Build|\) AppleWebKit)'
|
|
1710
1886
|
device_replacement: '$1'
|
|
1711
1887
|
brand_replacement: 'Acer'
|
|
1712
1888
|
model_replacement: '$1'
|
|
1713
|
-
- regex: ';
|
|
1889
|
+
- regex: '; {0,2}(Acer |ACER )([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1714
1890
|
device_replacement: '$1$2'
|
|
1715
1891
|
brand_replacement: 'Acer'
|
|
1716
1892
|
model_replacement: '$2'
|
|
@@ -1721,7 +1897,7 @@ device_parsers:
|
|
|
1721
1897
|
# @note: VegaBean and VegaComb (names derived from jellybean, honeycomb) are
|
|
1722
1898
|
# custom ROM builds for Vega
|
|
1723
1899
|
#########
|
|
1724
|
-
- regex: ';
|
|
1900
|
+
- regex: '; {0,2}(Advent |)(Vega(?:Bean|Comb|)).{0,200}?(?: Build|\) AppleWebKit)'
|
|
1725
1901
|
device_replacement: '$1$2'
|
|
1726
1902
|
brand_replacement: 'Advent'
|
|
1727
1903
|
model_replacement: '$2'
|
|
@@ -1730,7 +1906,7 @@ device_parsers:
|
|
|
1730
1906
|
# Ainol
|
|
1731
1907
|
# @ref: http://www.ainol.com/plugin.php?identifier=ainol&module=product
|
|
1732
1908
|
#########
|
|
1733
|
-
- regex: ';
|
|
1909
|
+
- regex: '; {0,2}(Ainol |)((?:NOVO|[Nn]ovo)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1734
1910
|
device_replacement: '$1$2'
|
|
1735
1911
|
brand_replacement: 'Ainol'
|
|
1736
1912
|
model_replacement: '$2'
|
|
@@ -1739,12 +1915,12 @@ device_parsers:
|
|
|
1739
1915
|
# Airis
|
|
1740
1916
|
# @ref: http://airis.es/Tienda/Default.aspx?idG=001
|
|
1741
1917
|
#########
|
|
1742
|
-
- regex: ';
|
|
1918
|
+
- regex: '; {0,2}AIRIS[ _\-]?([^/;\)]+) {0,2}(?:;|\)|Build)'
|
|
1743
1919
|
regex_flag: 'i'
|
|
1744
1920
|
device_replacement: '$1'
|
|
1745
1921
|
brand_replacement: 'Airis'
|
|
1746
1922
|
model_replacement: '$1'
|
|
1747
|
-
- regex: ';
|
|
1923
|
+
- regex: '; {0,2}(OnePAD[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1748
1924
|
regex_flag: 'i'
|
|
1749
1925
|
device_replacement: '$1'
|
|
1750
1926
|
brand_replacement: 'Airis'
|
|
@@ -1754,7 +1930,7 @@ device_parsers:
|
|
|
1754
1930
|
# Airpad
|
|
1755
1931
|
# @ref: ??
|
|
1756
1932
|
#########
|
|
1757
|
-
- regex: ';
|
|
1933
|
+
- regex: '; {0,2}Airpad[ \-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1758
1934
|
device_replacement: 'Airpad $1'
|
|
1759
1935
|
brand_replacement: 'Airpad'
|
|
1760
1936
|
model_replacement: '$1'
|
|
@@ -1763,29 +1939,29 @@ device_parsers:
|
|
|
1763
1939
|
# Alcatel - TCT
|
|
1764
1940
|
# @ref: http://www.alcatelonetouch.com/global-en/products/smartphones.html
|
|
1765
1941
|
#########
|
|
1766
|
-
- regex: ';
|
|
1942
|
+
- regex: '; {0,2}(one ?touch) (EVO7|T10|T20)(?: Build|\) AppleWebKit)'
|
|
1767
1943
|
device_replacement: 'Alcatel One Touch $2'
|
|
1768
1944
|
brand_replacement: 'Alcatel'
|
|
1769
1945
|
model_replacement: 'One Touch $2'
|
|
1770
|
-
- regex: ';
|
|
1946
|
+
- regex: '; {0,2}(?:alcatel[ _]|)(?:(?:one[ _]?touch[ _])|ot[ \-])([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1771
1947
|
regex_flag: 'i'
|
|
1772
1948
|
device_replacement: 'Alcatel One Touch $1'
|
|
1773
1949
|
brand_replacement: 'Alcatel'
|
|
1774
1950
|
model_replacement: 'One Touch $1'
|
|
1775
|
-
- regex: ';
|
|
1951
|
+
- regex: '; {0,2}(TCL)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1776
1952
|
device_replacement: '$1 $2'
|
|
1777
1953
|
brand_replacement: '$1'
|
|
1778
1954
|
model_replacement: '$2'
|
|
1779
1955
|
# operator specific models
|
|
1780
|
-
- regex: ';
|
|
1956
|
+
- regex: '; {0,2}(Vodafone Smart II|Optimus_Madrid)(?: Build|\) AppleWebKit)'
|
|
1781
1957
|
device_replacement: 'Alcatel $1'
|
|
1782
1958
|
brand_replacement: 'Alcatel'
|
|
1783
1959
|
model_replacement: '$1'
|
|
1784
|
-
- regex: ';
|
|
1960
|
+
- regex: '; {0,2}BASE_Lutea_3(?: Build|\) AppleWebKit)'
|
|
1785
1961
|
device_replacement: 'Alcatel One Touch 998'
|
|
1786
1962
|
brand_replacement: 'Alcatel'
|
|
1787
1963
|
model_replacement: 'One Touch 998'
|
|
1788
|
-
- regex: ';
|
|
1964
|
+
- regex: '; {0,2}BASE_Varia(?: Build|\) AppleWebKit)'
|
|
1789
1965
|
device_replacement: 'Alcatel One Touch 918D'
|
|
1790
1966
|
brand_replacement: 'Alcatel'
|
|
1791
1967
|
model_replacement: 'One Touch 918D'
|
|
@@ -1794,7 +1970,7 @@ device_parsers:
|
|
|
1794
1970
|
# Allfine
|
|
1795
1971
|
# @ref: http://www.myallfine.com/Products.asp
|
|
1796
1972
|
#########
|
|
1797
|
-
- regex: ';
|
|
1973
|
+
- regex: '; {0,2}((?:FINE|Fine)\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1798
1974
|
device_replacement: '$1'
|
|
1799
1975
|
brand_replacement: 'Allfine'
|
|
1800
1976
|
model_replacement: '$1'
|
|
@@ -1803,15 +1979,15 @@ device_parsers:
|
|
|
1803
1979
|
# Allview
|
|
1804
1980
|
# @ref: http://www.allview.ro/produse/droseries/lista-tablete-pc/
|
|
1805
1981
|
#########
|
|
1806
|
-
- regex: ';
|
|
1982
|
+
- regex: '; {0,2}(ALLVIEW[ _]?|Allview[ _]?)((?:Speed|SPEED).{0,200}?)(?: Build|\) AppleWebKit)'
|
|
1807
1983
|
device_replacement: '$1$2'
|
|
1808
1984
|
brand_replacement: 'Allview'
|
|
1809
1985
|
model_replacement: '$2'
|
|
1810
|
-
- regex: ';
|
|
1986
|
+
- regex: '; {0,2}(ALLVIEW[ _]?|Allview[ _]?|)(AX1_Shine|AX2_Frenzy)(?: Build|\) AppleWebKit)'
|
|
1811
1987
|
device_replacement: '$1$2'
|
|
1812
1988
|
brand_replacement: 'Allview'
|
|
1813
1989
|
model_replacement: '$2'
|
|
1814
|
-
- regex: ';
|
|
1990
|
+
- regex: '; {0,2}(ALLVIEW[ _]?|Allview[ _]?)([^;/]*?)(?: Build|\) AppleWebKit)'
|
|
1815
1991
|
device_replacement: '$1$2'
|
|
1816
1992
|
brand_replacement: 'Allview'
|
|
1817
1993
|
model_replacement: '$2'
|
|
@@ -1821,11 +1997,11 @@ device_parsers:
|
|
|
1821
1997
|
# @ref: http://www.allwinner.com/
|
|
1822
1998
|
# @models: A31 (13.3"),A20,A10,
|
|
1823
1999
|
#########
|
|
1824
|
-
- regex: ';
|
|
2000
|
+
- regex: '; {0,2}(A13-MID)(?: Build|\) AppleWebKit)'
|
|
1825
2001
|
device_replacement: '$1'
|
|
1826
2002
|
brand_replacement: 'Allwinner'
|
|
1827
2003
|
model_replacement: '$1'
|
|
1828
|
-
- regex: ';
|
|
2004
|
+
- regex: '; {0,2}(Allwinner)[ _\-]?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1829
2005
|
device_replacement: '$1 $2'
|
|
1830
2006
|
brand_replacement: 'Allwinner'
|
|
1831
2007
|
model_replacement: '$1'
|
|
@@ -1834,7 +2010,7 @@ device_parsers:
|
|
|
1834
2010
|
# Amaway
|
|
1835
2011
|
# @ref: http://www.amaway.cn/
|
|
1836
2012
|
#########
|
|
1837
|
-
- regex: ';
|
|
2013
|
+
- 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)'
|
|
1838
2014
|
device_replacement: '$1'
|
|
1839
2015
|
brand_replacement: 'Amaway'
|
|
1840
2016
|
model_replacement: '$1'
|
|
@@ -1843,11 +2019,11 @@ device_parsers:
|
|
|
1843
2019
|
# Amoi
|
|
1844
2020
|
# @ref: http://www.amoi.com/en/prd/prd_index.jspx
|
|
1845
2021
|
#########
|
|
1846
|
-
- regex: ';
|
|
2022
|
+
- regex: '; {0,2}(?:AMOI|Amoi)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1847
2023
|
device_replacement: 'Amoi $1'
|
|
1848
2024
|
brand_replacement: 'Amoi'
|
|
1849
2025
|
model_replacement: '$1'
|
|
1850
|
-
- regex: '^(?:AMOI|Amoi)[ _]([^;/]
|
|
2026
|
+
- regex: '^(?:AMOI|Amoi)[ _]([^;/]{1,100}?) Linux'
|
|
1851
2027
|
device_replacement: 'Amoi $1'
|
|
1852
2028
|
brand_replacement: 'Amoi'
|
|
1853
2029
|
model_replacement: '$1'
|
|
@@ -1856,7 +2032,7 @@ device_parsers:
|
|
|
1856
2032
|
# Aoc
|
|
1857
2033
|
# @ref: http://latin.aoc.com/media_tablet
|
|
1858
2034
|
#########
|
|
1859
|
-
- regex: ';
|
|
2035
|
+
- regex: '; {0,2}(MW(?:0[789]|10)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1860
2036
|
device_replacement: '$1'
|
|
1861
2037
|
brand_replacement: 'Aoc'
|
|
1862
2038
|
model_replacement: '$1'
|
|
@@ -1867,11 +2043,11 @@ device_parsers:
|
|
|
1867
2043
|
# @ref: http://www.luckystar.com.cn/en/mobiletel.aspx?page=1
|
|
1868
2044
|
# @note: brand owned by luckystar
|
|
1869
2045
|
#########
|
|
1870
|
-
- regex: ';
|
|
2046
|
+
- 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)'
|
|
1871
2047
|
device_replacement: 'Aoson $1'
|
|
1872
2048
|
brand_replacement: 'Aoson'
|
|
1873
2049
|
model_replacement: '$1'
|
|
1874
|
-
- regex: ';
|
|
2050
|
+
- regex: '; {0,2}Aoson ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1875
2051
|
regex_flag: 'i'
|
|
1876
2052
|
device_replacement: 'Aoson $1'
|
|
1877
2053
|
brand_replacement: 'Aoson'
|
|
@@ -1881,7 +2057,7 @@ device_parsers:
|
|
|
1881
2057
|
# Apanda
|
|
1882
2058
|
# @ref: http://www.apanda.com.cn/
|
|
1883
2059
|
#########
|
|
1884
|
-
- regex: ';
|
|
2060
|
+
- regex: '; {0,2}[Aa]panda[ _\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1885
2061
|
device_replacement: 'Apanda $1'
|
|
1886
2062
|
brand_replacement: 'Apanda'
|
|
1887
2063
|
model_replacement: '$1'
|
|
@@ -1891,23 +2067,23 @@ device_parsers:
|
|
|
1891
2067
|
# @ref: http://www.archos.com/de/products/tablets.html
|
|
1892
2068
|
# @ref: http://www.archos.com/de/products/smartphones/index.html
|
|
1893
2069
|
#########
|
|
1894
|
-
- regex: ';
|
|
2070
|
+
- regex: '; {0,2}(?:ARCHOS|Archos) ?(GAMEPAD.{0,200}?)(?: Build|\) AppleWebKit)'
|
|
1895
2071
|
device_replacement: 'Archos $1'
|
|
1896
2072
|
brand_replacement: 'Archos'
|
|
1897
2073
|
model_replacement: '$1'
|
|
1898
|
-
- regex: 'ARCHOS; GOGI; ([^;]
|
|
2074
|
+
- regex: 'ARCHOS; GOGI; ([^;]{1,200});'
|
|
1899
2075
|
device_replacement: 'Archos $1'
|
|
1900
2076
|
brand_replacement: 'Archos'
|
|
1901
2077
|
model_replacement: '$1'
|
|
1902
|
-
- regex: '(?:ARCHOS|Archos)[ _]?(
|
|
2078
|
+
- regex: '(?:ARCHOS|Archos)[ _]?(.{0,200}?)(?: Build|[;/\(\)\-]|$)'
|
|
1903
2079
|
device_replacement: 'Archos $1'
|
|
1904
2080
|
brand_replacement: 'Archos'
|
|
1905
2081
|
model_replacement: '$1'
|
|
1906
|
-
- regex: ';
|
|
2082
|
+
- regex: '; {0,2}(AN(?:7|8|9|10|13)[A-Z0-9]{1,4})(?: Build|\) AppleWebKit)'
|
|
1907
2083
|
device_replacement: 'Archos $1'
|
|
1908
2084
|
brand_replacement: 'Archos'
|
|
1909
2085
|
model_replacement: '$1'
|
|
1910
|
-
- regex: ';
|
|
2086
|
+
- regex: '; {0,2}(A28|A32|A43|A70(?:BHT|CHT|HB|S|X)|A101(?:B|C|IT)|A7EB|A7EB-WK|101G9|80G9)(?: Build|\) AppleWebKit)'
|
|
1911
2087
|
device_replacement: 'Archos $1'
|
|
1912
2088
|
brand_replacement: 'Archos'
|
|
1913
2089
|
model_replacement: '$1'
|
|
@@ -1916,11 +2092,11 @@ device_parsers:
|
|
|
1916
2092
|
# A-rival
|
|
1917
2093
|
# @ref: http://www.a-rival.de/de/
|
|
1918
2094
|
#########
|
|
1919
|
-
- regex: ';
|
|
2095
|
+
- regex: '; {0,2}(PAD-FMD[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1920
2096
|
device_replacement: '$1'
|
|
1921
2097
|
brand_replacement: 'Arival'
|
|
1922
2098
|
model_replacement: '$1'
|
|
1923
|
-
- regex: ';
|
|
2099
|
+
- regex: '; {0,2}(BioniQ) ?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1924
2100
|
device_replacement: '$1 $2'
|
|
1925
2101
|
brand_replacement: 'Arival'
|
|
1926
2102
|
model_replacement: '$1 $2'
|
|
@@ -1929,11 +2105,11 @@ device_parsers:
|
|
|
1929
2105
|
# Arnova
|
|
1930
2106
|
# @ref: http://arnovatech.com/
|
|
1931
2107
|
#########
|
|
1932
|
-
- regex: ';
|
|
2108
|
+
- regex: '; {0,2}(AN\d[^;/]{1,100}|ARCHM\d+)(?: Build|\) AppleWebKit)'
|
|
1933
2109
|
device_replacement: 'Arnova $1'
|
|
1934
2110
|
brand_replacement: 'Arnova'
|
|
1935
2111
|
model_replacement: '$1'
|
|
1936
|
-
- regex: ';
|
|
2112
|
+
- regex: '; {0,2}(?:ARNOVA|Arnova) ?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1937
2113
|
device_replacement: 'Arnova $1'
|
|
1938
2114
|
brand_replacement: 'Arnova'
|
|
1939
2115
|
model_replacement: '$1'
|
|
@@ -1942,7 +2118,7 @@ device_parsers:
|
|
|
1942
2118
|
# Assistant
|
|
1943
2119
|
# @ref: http://www.assistant.ua
|
|
1944
2120
|
#########
|
|
1945
|
-
- regex: ';
|
|
2121
|
+
- regex: '; {0,2}(?:ASSISTANT |)(AP)-?([1789]\d{2}[A-Z]{0,2}|80104)(?: Build|\) AppleWebKit)'
|
|
1946
2122
|
device_replacement: 'Assistant $1-$2'
|
|
1947
2123
|
brand_replacement: 'Assistant'
|
|
1948
2124
|
model_replacement: '$1-$2'
|
|
@@ -1951,11 +2127,11 @@ device_parsers:
|
|
|
1951
2127
|
# Asus
|
|
1952
2128
|
# @ref: http://www.asus.com/uk/Tablets_Mobile/
|
|
1953
2129
|
#########
|
|
1954
|
-
- regex: ';
|
|
2130
|
+
- 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)'
|
|
1955
2131
|
device_replacement: 'Asus $1'
|
|
1956
2132
|
brand_replacement: 'Asus'
|
|
1957
2133
|
model_replacement: '$1'
|
|
1958
|
-
- regex: ';
|
|
2134
|
+
- regex: '; {0,2}ASUS[ _]{0,10}([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1959
2135
|
device_replacement: 'Asus $1'
|
|
1960
2136
|
brand_replacement: 'Asus'
|
|
1961
2137
|
model_replacement: '$1'
|
|
@@ -1963,11 +2139,11 @@ device_parsers:
|
|
|
1963
2139
|
#########
|
|
1964
2140
|
# Garmin-Asus
|
|
1965
2141
|
#########
|
|
1966
|
-
- regex: ';
|
|
2142
|
+
- regex: '; {0,2}Garmin-Asus ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1967
2143
|
device_replacement: 'Garmin-Asus $1'
|
|
1968
2144
|
brand_replacement: 'Garmin-Asus'
|
|
1969
2145
|
model_replacement: '$1'
|
|
1970
|
-
- regex: ';
|
|
2146
|
+
- regex: '; {0,2}(Garminfone)(?: Build|\) AppleWebKit)'
|
|
1971
2147
|
device_replacement: 'Garmin $1'
|
|
1972
2148
|
brand_replacement: 'Garmin-Asus'
|
|
1973
2149
|
model_replacement: '$1'
|
|
@@ -1976,7 +2152,7 @@ device_parsers:
|
|
|
1976
2152
|
# Attab
|
|
1977
2153
|
# @ref: http://www.theattab.com/
|
|
1978
2154
|
#########
|
|
1979
|
-
- regex: '; (@TAB-[^;/]
|
|
2155
|
+
- regex: '; (@TAB-[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1980
2156
|
device_replacement: '$1'
|
|
1981
2157
|
brand_replacement: 'Attab'
|
|
1982
2158
|
model_replacement: '$1'
|
|
@@ -1986,7 +2162,7 @@ device_parsers:
|
|
|
1986
2162
|
# @ref: ??
|
|
1987
2163
|
# @note: Take care with Docomo T-01 Toshiba
|
|
1988
2164
|
#########
|
|
1989
|
-
- regex: ';
|
|
2165
|
+
- regex: '; {0,2}(T-(?:07|[^0]\d)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
1990
2166
|
device_replacement: '$1'
|
|
1991
2167
|
brand_replacement: 'Audiosonic'
|
|
1992
2168
|
model_replacement: '$1'
|
|
@@ -1995,7 +2171,7 @@ device_parsers:
|
|
|
1995
2171
|
# Axioo
|
|
1996
2172
|
# @ref: http://www.axiooworld.com/ww/index.php
|
|
1997
2173
|
#########
|
|
1998
|
-
- regex: ';
|
|
2174
|
+
- regex: '; {0,2}(?:Axioo[ _\-]([^;/]{1,100}?)|(picopad)[ _\-]([^;/]{1,100}?))(?: Build|\) AppleWebKit)'
|
|
1999
2175
|
regex_flag: 'i'
|
|
2000
2176
|
device_replacement: 'Axioo $1$2 $3'
|
|
2001
2177
|
brand_replacement: 'Axioo'
|
|
@@ -2005,7 +2181,7 @@ device_parsers:
|
|
|
2005
2181
|
# Azend
|
|
2006
2182
|
# @ref: http://azendcorp.com/index.php/products/portable-electronics
|
|
2007
2183
|
#########
|
|
2008
|
-
- regex: ';
|
|
2184
|
+
- regex: '; {0,2}(V(?:100|700|800)[^;/]*)(?: Build|\) AppleWebKit)'
|
|
2009
2185
|
device_replacement: '$1'
|
|
2010
2186
|
brand_replacement: 'Azend'
|
|
2011
2187
|
model_replacement: '$1'
|
|
@@ -2014,7 +2190,7 @@ device_parsers:
|
|
|
2014
2190
|
# Bak
|
|
2015
2191
|
# @ref: http://www.bakinternational.com/produtos.php?cat=80
|
|
2016
2192
|
#########
|
|
2017
|
-
- regex: ';
|
|
2193
|
+
- regex: '; {0,2}(IBAK\-[^;/]*)(?: Build|\) AppleWebKit)'
|
|
2018
2194
|
regex_flag: 'i'
|
|
2019
2195
|
device_replacement: '$1'
|
|
2020
2196
|
brand_replacement: 'Bak'
|
|
@@ -2025,7 +2201,7 @@ device_parsers:
|
|
|
2025
2201
|
# @ref: http://www.bedove.com/product.html
|
|
2026
2202
|
# @models: HY6501|HY5001|X12|X21|I5
|
|
2027
2203
|
#########
|
|
2028
|
-
- regex: ';
|
|
2204
|
+
- regex: '; {0,2}(HY5001|HY6501|X12|X21|I5)(?: Build|\) AppleWebKit)'
|
|
2029
2205
|
device_replacement: 'Bedove $1'
|
|
2030
2206
|
brand_replacement: 'Bedove'
|
|
2031
2207
|
model_replacement: '$1'
|
|
@@ -2034,7 +2210,7 @@ device_parsers:
|
|
|
2034
2210
|
# Benss
|
|
2035
2211
|
# @ref: http://www.benss.net/
|
|
2036
2212
|
#########
|
|
2037
|
-
- regex: ';
|
|
2213
|
+
- regex: '; {0,2}(JC-[^;/]*)(?: Build|\) AppleWebKit)'
|
|
2038
2214
|
device_replacement: 'Benss $1'
|
|
2039
2215
|
brand_replacement: 'Benss'
|
|
2040
2216
|
model_replacement: '$1'
|
|
@@ -2044,7 +2220,7 @@ device_parsers:
|
|
|
2044
2220
|
# @ref: http://uk.blackberry.com/
|
|
2045
2221
|
# @note: Android Apps seams to be used here
|
|
2046
2222
|
#########
|
|
2047
|
-
- regex: ';
|
|
2223
|
+
- regex: '; {0,2}(BB) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2048
2224
|
device_replacement: '$1 $2'
|
|
2049
2225
|
brand_replacement: 'Blackberry'
|
|
2050
2226
|
model_replacement: '$2'
|
|
@@ -2053,11 +2229,11 @@ device_parsers:
|
|
|
2053
2229
|
# Blackbird
|
|
2054
2230
|
# @ref: http://iblackbird.co.kr
|
|
2055
2231
|
#########
|
|
2056
|
-
- regex: ';
|
|
2232
|
+
- regex: '; {0,2}(BlackBird)[ _](I8.{0,200}?)(?: Build|\) AppleWebKit)'
|
|
2057
2233
|
device_replacement: '$1 $2'
|
|
2058
2234
|
brand_replacement: '$1'
|
|
2059
2235
|
model_replacement: '$2'
|
|
2060
|
-
- regex: ';
|
|
2236
|
+
- regex: '; {0,2}(BlackBird)[ _](.{0,200}?)(?: Build|\) AppleWebKit)'
|
|
2061
2237
|
device_replacement: '$1 $2'
|
|
2062
2238
|
brand_replacement: '$1'
|
|
2063
2239
|
model_replacement: '$2'
|
|
@@ -2067,7 +2243,7 @@ device_parsers:
|
|
|
2067
2243
|
# @ref: http://www.blaupunkt.com
|
|
2068
2244
|
#########
|
|
2069
2245
|
# Endeavour
|
|
2070
|
-
- regex: ';
|
|
2246
|
+
- regex: '; {0,2}([0-9]+BP[EM][^;/]*|Endeavour[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2071
2247
|
device_replacement: 'Blaupunkt $1'
|
|
2072
2248
|
brand_replacement: 'Blaupunkt'
|
|
2073
2249
|
model_replacement: '$1'
|
|
@@ -2076,12 +2252,12 @@ device_parsers:
|
|
|
2076
2252
|
# Blu
|
|
2077
2253
|
# @ref: http://bluproducts.com
|
|
2078
2254
|
#########
|
|
2079
|
-
- regex: ';
|
|
2255
|
+
- regex: '; {0,2}((?:BLU|Blu)[ _\-])([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2080
2256
|
device_replacement: '$1$2'
|
|
2081
2257
|
brand_replacement: 'Blu'
|
|
2082
2258
|
model_replacement: '$2'
|
|
2083
2259
|
# BMOBILE = operator branded device
|
|
2084
|
-
- regex: ';
|
|
2260
|
+
- regex: '; {0,2}(?:BMOBILE )?(Blu|BLU|DASH [^;/]{1,100}|VIVO 4\.3|TANK 4\.5)(?: Build|\) AppleWebKit)'
|
|
2085
2261
|
device_replacement: '$1'
|
|
2086
2262
|
brand_replacement: 'Blu'
|
|
2087
2263
|
model_replacement: '$1'
|
|
@@ -2091,7 +2267,7 @@ device_parsers:
|
|
|
2091
2267
|
# @ref: http://www.blusens.com/es/?sg=1&sv=al&roc=1
|
|
2092
2268
|
#########
|
|
2093
2269
|
# tablet
|
|
2094
|
-
- regex: ';
|
|
2270
|
+
- regex: '; {0,2}(TOUCH\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2095
2271
|
device_replacement: '$1'
|
|
2096
2272
|
brand_replacement: 'Blusens'
|
|
2097
2273
|
model_replacement: '$1'
|
|
@@ -2102,7 +2278,7 @@ device_parsers:
|
|
|
2102
2278
|
# @note: Might collide with Maxx as AX is used also there.
|
|
2103
2279
|
#########
|
|
2104
2280
|
# smartphone
|
|
2105
|
-
- regex: ';
|
|
2281
|
+
- regex: '; {0,2}(AX5\d+)(?: Build|\) AppleWebKit)'
|
|
2106
2282
|
device_replacement: '$1'
|
|
2107
2283
|
brand_replacement: 'Bmobile'
|
|
2108
2284
|
model_replacement: '$1'
|
|
@@ -2111,11 +2287,11 @@ device_parsers:
|
|
|
2111
2287
|
# bq
|
|
2112
2288
|
# @ref: http://bqreaders.com
|
|
2113
2289
|
#########
|
|
2114
|
-
- regex: ';
|
|
2290
|
+
- regex: '; {0,2}([Bb]q) ([^;/]{1,100}?);?(?: Build|\) AppleWebKit)'
|
|
2115
2291
|
device_replacement: '$1 $2'
|
|
2116
2292
|
brand_replacement: 'bq'
|
|
2117
2293
|
model_replacement: '$2'
|
|
2118
|
-
- regex: ';
|
|
2294
|
+
- regex: '; {0,2}(Maxwell [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2119
2295
|
device_replacement: '$1'
|
|
2120
2296
|
brand_replacement: 'bq'
|
|
2121
2297
|
model_replacement: '$1'
|
|
@@ -2124,7 +2300,7 @@ device_parsers:
|
|
|
2124
2300
|
# Braun Phototechnik
|
|
2125
2301
|
# @ref: http://www.braun-phototechnik.de/en/products/list/~pcat.250/Tablet-PC.html
|
|
2126
2302
|
#########
|
|
2127
|
-
- regex: ';
|
|
2303
|
+
- regex: '; {0,2}((?:B-Tab|B-TAB) ?\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2128
2304
|
device_replacement: '$1'
|
|
2129
2305
|
brand_replacement: 'Braun'
|
|
2130
2306
|
model_replacement: '$1'
|
|
@@ -2133,7 +2309,7 @@ device_parsers:
|
|
|
2133
2309
|
# Broncho
|
|
2134
2310
|
# @ref: http://www.broncho.cn/
|
|
2135
2311
|
#########
|
|
2136
|
-
- regex: ';
|
|
2312
|
+
- regex: '; {0,2}(Broncho) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2137
2313
|
device_replacement: '$1 $2'
|
|
2138
2314
|
brand_replacement: '$1'
|
|
2139
2315
|
model_replacement: '$2'
|
|
@@ -2142,7 +2318,7 @@ device_parsers:
|
|
|
2142
2318
|
# Captiva
|
|
2143
2319
|
# @ref: http://www.captiva-power.de
|
|
2144
2320
|
#########
|
|
2145
|
-
- regex: ';
|
|
2321
|
+
- regex: '; {0,2}CAPTIVA ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2146
2322
|
device_replacement: 'Captiva $1'
|
|
2147
2323
|
brand_replacement: 'Captiva'
|
|
2148
2324
|
model_replacement: '$1'
|
|
@@ -2151,7 +2327,7 @@ device_parsers:
|
|
|
2151
2327
|
# Casio
|
|
2152
2328
|
# @ref: http://www.casiogzone.com/
|
|
2153
2329
|
#########
|
|
2154
|
-
- regex: ';
|
|
2330
|
+
- regex: '; {0,2}(C771|CAL21|IS11CA)(?: Build|\) AppleWebKit)'
|
|
2155
2331
|
device_replacement: '$1'
|
|
2156
2332
|
brand_replacement: 'Casio'
|
|
2157
2333
|
model_replacement: '$1'
|
|
@@ -2160,15 +2336,15 @@ device_parsers:
|
|
|
2160
2336
|
# Cat
|
|
2161
2337
|
# @ref: http://www.cat-sound.com
|
|
2162
2338
|
#########
|
|
2163
|
-
- regex: ';
|
|
2339
|
+
- regex: '; {0,2}(?:Cat|CAT) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2164
2340
|
device_replacement: 'Cat $1'
|
|
2165
2341
|
brand_replacement: 'Cat'
|
|
2166
2342
|
model_replacement: '$1'
|
|
2167
|
-
- regex: ';
|
|
2343
|
+
- regex: '; {0,2}(?:Cat)(Nova.{0,200}?)(?: Build|\) AppleWebKit)'
|
|
2168
2344
|
device_replacement: 'Cat $1'
|
|
2169
2345
|
brand_replacement: 'Cat'
|
|
2170
2346
|
model_replacement: '$1'
|
|
2171
|
-
- regex: ';
|
|
2347
|
+
- regex: '; {0,2}(INM8002KP|ADM8000KP_[AB])(?: Build|\) AppleWebKit)'
|
|
2172
2348
|
device_replacement: '$1'
|
|
2173
2349
|
brand_replacement: 'Cat'
|
|
2174
2350
|
model_replacement: 'Tablet PHOENIX 8.1J0'
|
|
@@ -2178,7 +2354,7 @@ device_parsers:
|
|
|
2178
2354
|
# @ref: http://www.celkonmobiles.com/?_a=products
|
|
2179
2355
|
# @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
|
|
2180
2356
|
#########
|
|
2181
|
-
- regex: ';
|
|
2357
|
+
- regex: '; {0,2}(?:[Cc]elkon[ _\*]|CELKON[ _\*])([^;/\)]+) ?(?:Build|;|\))'
|
|
2182
2358
|
device_replacement: '$1'
|
|
2183
2359
|
brand_replacement: 'Celkon'
|
|
2184
2360
|
model_replacement: '$1'
|
|
@@ -2186,12 +2362,12 @@ device_parsers:
|
|
|
2186
2362
|
device_replacement: '$1'
|
|
2187
2363
|
brand_replacement: 'Celkon'
|
|
2188
2364
|
model_replacement: '$1'
|
|
2189
|
-
- regex: ';
|
|
2365
|
+
- regex: '; {0,2}(CT)-?(\d+)(?: Build|\) AppleWebKit)'
|
|
2190
2366
|
device_replacement: '$1$2'
|
|
2191
2367
|
brand_replacement: 'Celkon'
|
|
2192
2368
|
model_replacement: '$1$2'
|
|
2193
2369
|
# smartphones
|
|
2194
|
-
- regex: ';
|
|
2370
|
+
- regex: '; {0,2}(A19|A19Q|A105|A107[^;/\)]*) ?(?:Build|;|\))'
|
|
2195
2371
|
device_replacement: '$1'
|
|
2196
2372
|
brand_replacement: 'Celkon'
|
|
2197
2373
|
model_replacement: '$1'
|
|
@@ -2202,7 +2378,7 @@ device_parsers:
|
|
|
2202
2378
|
# @brief: China manufacturer makes tablets for different small brands
|
|
2203
2379
|
# (eg. http://www.zeepad.net/index.html)
|
|
2204
2380
|
#########
|
|
2205
|
-
- regex: ';
|
|
2381
|
+
- regex: '; {0,2}(TPC[0-9]{4,5})(?: Build|\) AppleWebKit)'
|
|
2206
2382
|
device_replacement: '$1'
|
|
2207
2383
|
brand_replacement: 'ChangJia'
|
|
2208
2384
|
model_replacement: '$1'
|
|
@@ -2211,15 +2387,15 @@ device_parsers:
|
|
|
2211
2387
|
# Cloudfone
|
|
2212
2388
|
# @ref: http://www.cloudfonemobile.com/
|
|
2213
2389
|
#########
|
|
2214
|
-
- regex: ';
|
|
2390
|
+
- regex: '; {0,2}(Cloudfone)[ _](Excite)([^ ][^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2215
2391
|
device_replacement: '$1 $2 $3'
|
|
2216
2392
|
brand_replacement: 'Cloudfone'
|
|
2217
2393
|
model_replacement: '$1 $2 $3'
|
|
2218
|
-
- regex: ';
|
|
2394
|
+
- regex: '; {0,2}(Excite|ICE)[ _](\d+[^;/]{0,100}?)(?: Build|\) AppleWebKit)'
|
|
2219
2395
|
device_replacement: 'Cloudfone $1 $2'
|
|
2220
2396
|
brand_replacement: 'Cloudfone'
|
|
2221
2397
|
model_replacement: 'Cloudfone $1 $2'
|
|
2222
|
-
- regex: ';
|
|
2398
|
+
- regex: '; {0,2}(Cloudfone|CloudPad)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2223
2399
|
device_replacement: '$1 $2'
|
|
2224
2400
|
brand_replacement: 'Cloudfone'
|
|
2225
2401
|
model_replacement: '$1 $2'
|
|
@@ -2228,7 +2404,7 @@ device_parsers:
|
|
|
2228
2404
|
# Cmx
|
|
2229
2405
|
# @ref: http://cmx.at/de/
|
|
2230
2406
|
#########
|
|
2231
|
-
- regex: ';
|
|
2407
|
+
- regex: '; {0,2}((?:Aquila|Clanga|Rapax)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2232
2408
|
regex_flag: 'i'
|
|
2233
2409
|
device_replacement: '$1'
|
|
2234
2410
|
brand_replacement: 'Cmx'
|
|
@@ -2239,7 +2415,7 @@ device_parsers:
|
|
|
2239
2415
|
# @ref: http://cobykyros.com
|
|
2240
2416
|
# @note: Be careful with MID\d{3} from MpMan or Manta
|
|
2241
2417
|
#########
|
|
2242
|
-
- regex: ';
|
|
2418
|
+
- regex: '; {0,2}(?:CFW-|Kyros )?(MID[0-9]{4}(?:[ABC]|SR|TV)?)(\(3G\)-4G| GB 8K| 3G| 8K| GB)? {0,2}(?:Build|[;\)])'
|
|
2243
2419
|
device_replacement: 'CobyKyros $1$2'
|
|
2244
2420
|
brand_replacement: 'CobyKyros'
|
|
2245
2421
|
model_replacement: '$1$2'
|
|
@@ -2248,7 +2424,7 @@ device_parsers:
|
|
|
2248
2424
|
# Coolpad
|
|
2249
2425
|
# @ref: ??
|
|
2250
2426
|
#########
|
|
2251
|
-
- regex: ';
|
|
2427
|
+
- regex: '; {0,2}([^;/]{0,50})Coolpad[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2252
2428
|
device_replacement: '$1$2'
|
|
2253
2429
|
brand_replacement: 'Coolpad'
|
|
2254
2430
|
model_replacement: '$1$2'
|
|
@@ -2257,7 +2433,7 @@ device_parsers:
|
|
|
2257
2433
|
# Cube
|
|
2258
2434
|
# @ref: http://www.cube-tablet.com/buy-products.html
|
|
2259
2435
|
#########
|
|
2260
|
-
- regex: ';
|
|
2436
|
+
- regex: '; {0,2}(CUBE[ _])?([KU][0-9]+ ?GT.{0,200}?|A5300)(?: Build|\) AppleWebKit)'
|
|
2261
2437
|
regex_flag: 'i'
|
|
2262
2438
|
device_replacement: '$1$2'
|
|
2263
2439
|
brand_replacement: 'Cube'
|
|
@@ -2267,12 +2443,12 @@ device_parsers:
|
|
|
2267
2443
|
# Cubot
|
|
2268
2444
|
# @ref: http://www.cubotmall.com/
|
|
2269
2445
|
#########
|
|
2270
|
-
- regex: ';
|
|
2446
|
+
- regex: '; {0,2}CUBOT ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2271
2447
|
regex_flag: 'i'
|
|
2272
2448
|
device_replacement: '$1'
|
|
2273
2449
|
brand_replacement: 'Cubot'
|
|
2274
2450
|
model_replacement: '$1'
|
|
2275
|
-
- regex: ';
|
|
2451
|
+
- regex: '; {0,2}(BOBBY)(?: Build|\) AppleWebKit)'
|
|
2276
2452
|
regex_flag: 'i'
|
|
2277
2453
|
device_replacement: '$1'
|
|
2278
2454
|
brand_replacement: 'Cubot'
|
|
@@ -2282,7 +2458,7 @@ device_parsers:
|
|
|
2282
2458
|
# Danew
|
|
2283
2459
|
# @ref: http://www.danew.com/produits-tablette.php
|
|
2284
2460
|
#########
|
|
2285
|
-
- regex: ';
|
|
2461
|
+
- regex: '; {0,2}(Dslide [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2286
2462
|
device_replacement: '$1'
|
|
2287
2463
|
brand_replacement: 'Danew'
|
|
2288
2464
|
model_replacement: '$1'
|
|
@@ -2296,39 +2472,35 @@ device_parsers:
|
|
|
2296
2472
|
# @ref: http://www.dell.com/in/p/mobile-xcd28/pd
|
|
2297
2473
|
# @ref: http://www.dell.com/in/p/mobile-xcd35/pd
|
|
2298
2474
|
#########
|
|
2299
|
-
- regex: ';
|
|
2475
|
+
- regex: '; {0,2}(XCD)[ _]?(28|35)(?: Build|\) AppleWebKit)'
|
|
2300
2476
|
device_replacement: 'Dell $1$2'
|
|
2301
2477
|
brand_replacement: 'Dell'
|
|
2302
2478
|
model_replacement: '$1$2'
|
|
2303
|
-
- regex: ';
|
|
2479
|
+
- regex: '; {0,2}(001DL)(?: Build|\) AppleWebKit)'
|
|
2304
2480
|
device_replacement: 'Dell $1'
|
|
2305
2481
|
brand_replacement: 'Dell'
|
|
2306
2482
|
model_replacement: 'Streak'
|
|
2307
|
-
- regex: ';
|
|
2483
|
+
- regex: '; {0,2}(?:Dell|DELL) (Streak)(?: Build|\) AppleWebKit)'
|
|
2308
2484
|
device_replacement: 'Dell $1'
|
|
2309
2485
|
brand_replacement: 'Dell'
|
|
2310
2486
|
model_replacement: 'Streak'
|
|
2311
|
-
- regex: ';
|
|
2487
|
+
- regex: '; {0,2}(101DL|GS01|Streak Pro[^;/]{0,100})(?: Build|\) AppleWebKit)'
|
|
2312
2488
|
device_replacement: 'Dell $1'
|
|
2313
2489
|
brand_replacement: 'Dell'
|
|
2314
2490
|
model_replacement: 'Streak Pro'
|
|
2315
|
-
- regex: ';
|
|
2491
|
+
- regex: '; {0,2}([Ss]treak ?7)(?: Build|\) AppleWebKit)'
|
|
2316
2492
|
device_replacement: 'Dell $1'
|
|
2317
2493
|
brand_replacement: 'Dell'
|
|
2318
2494
|
model_replacement: 'Streak 7'
|
|
2319
|
-
- regex: ';
|
|
2320
|
-
device_replacement: 'Dell $1'
|
|
2321
|
-
brand_replacement: 'Dell'
|
|
2322
|
-
model_replacement: '$1'
|
|
2323
|
-
- regex: '; *(?:Dell|DELL)[ _](Aero|Venue|Thunder|Mini.*?|Streak[ _]Pro)(?: Build|\) AppleWebKit)'
|
|
2495
|
+
- regex: '; {0,2}(Mini-3iX)(?: Build|\) AppleWebKit)'
|
|
2324
2496
|
device_replacement: 'Dell $1'
|
|
2325
2497
|
brand_replacement: 'Dell'
|
|
2326
2498
|
model_replacement: '$1'
|
|
2327
|
-
- regex: ';
|
|
2499
|
+
- regex: '; {0,2}(?:Dell|DELL)[ _](Aero|Venue|Thunder|Mini.{0,200}?|Streak[ _]Pro)(?: Build|\) AppleWebKit)'
|
|
2328
2500
|
device_replacement: 'Dell $1'
|
|
2329
2501
|
brand_replacement: 'Dell'
|
|
2330
2502
|
model_replacement: '$1'
|
|
2331
|
-
- regex: ';
|
|
2503
|
+
- regex: '; {0,2}Dell[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2332
2504
|
device_replacement: 'Dell $1'
|
|
2333
2505
|
brand_replacement: 'Dell'
|
|
2334
2506
|
model_replacement: '$1'
|
|
@@ -2337,7 +2509,7 @@ device_parsers:
|
|
|
2337
2509
|
# Denver
|
|
2338
2510
|
# @ref: http://www.denver-electronics.com/tablets1/
|
|
2339
2511
|
#########
|
|
2340
|
-
- regex: ';
|
|
2512
|
+
- regex: '; {0,2}(TA[CD]-\d+[^;/]{0,100})(?: Build|\) AppleWebKit)'
|
|
2341
2513
|
device_replacement: '$1'
|
|
2342
2514
|
brand_replacement: 'Denver'
|
|
2343
2515
|
model_replacement: '$1'
|
|
@@ -2346,7 +2518,7 @@ device_parsers:
|
|
|
2346
2518
|
# Dex
|
|
2347
2519
|
# @ref: http://dex.ua/
|
|
2348
2520
|
#########
|
|
2349
|
-
- regex: ';
|
|
2521
|
+
- regex: '; {0,2}(iP[789]\d{2}(?:-3G)?|IP10\d{2}(?:-8GB)?)(?: Build|\) AppleWebKit)'
|
|
2350
2522
|
device_replacement: '$1'
|
|
2351
2523
|
brand_replacement: 'Dex'
|
|
2352
2524
|
model_replacement: '$1'
|
|
@@ -2355,7 +2527,7 @@ device_parsers:
|
|
|
2355
2527
|
# DNS AirTab
|
|
2356
2528
|
# @ref: http://www.dns-shop.ru/
|
|
2357
2529
|
#########
|
|
2358
|
-
- regex: ';
|
|
2530
|
+
- regex: '; {0,2}(AirTab)[ _\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2359
2531
|
device_replacement: '$1 $2'
|
|
2360
2532
|
brand_replacement: 'DNS'
|
|
2361
2533
|
model_replacement: '$1 $2'
|
|
@@ -2364,43 +2536,43 @@ device_parsers:
|
|
|
2364
2536
|
# Docomo (Operator Branded Device)
|
|
2365
2537
|
# @ref: http://www.ipentec.com/document/document.aspx?page=android-useragent
|
|
2366
2538
|
#########
|
|
2367
|
-
- regex: ';
|
|
2539
|
+
- regex: '; {0,2}(F\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2368
2540
|
device_replacement: '$1'
|
|
2369
2541
|
brand_replacement: 'Fujitsu'
|
|
2370
2542
|
model_replacement: '$1'
|
|
2371
|
-
- regex: ';
|
|
2543
|
+
- regex: '; {0,2}(HT-03A)(?: Build|\) AppleWebKit)'
|
|
2372
2544
|
device_replacement: '$1'
|
|
2373
2545
|
brand_replacement: 'HTC'
|
|
2374
2546
|
model_replacement: 'Magic'
|
|
2375
|
-
- regex: ';
|
|
2547
|
+
- regex: '; {0,2}(HT\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2376
2548
|
device_replacement: '$1'
|
|
2377
2549
|
brand_replacement: 'HTC'
|
|
2378
2550
|
model_replacement: '$1'
|
|
2379
|
-
- regex: ';
|
|
2551
|
+
- regex: '; {0,2}(L\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2380
2552
|
device_replacement: '$1'
|
|
2381
2553
|
brand_replacement: 'LG'
|
|
2382
2554
|
model_replacement: '$1'
|
|
2383
|
-
- regex: ';
|
|
2555
|
+
- regex: '; {0,2}(N\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2384
2556
|
device_replacement: '$1'
|
|
2385
2557
|
brand_replacement: 'Nec'
|
|
2386
2558
|
model_replacement: '$1'
|
|
2387
|
-
- regex: ';
|
|
2559
|
+
- regex: '; {0,2}(P\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2388
2560
|
device_replacement: '$1'
|
|
2389
2561
|
brand_replacement: 'Panasonic'
|
|
2390
2562
|
model_replacement: '$1'
|
|
2391
|
-
- regex: ';
|
|
2563
|
+
- regex: '; {0,2}(SC\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2392
2564
|
device_replacement: '$1'
|
|
2393
2565
|
brand_replacement: 'Samsung'
|
|
2394
2566
|
model_replacement: '$1'
|
|
2395
|
-
- regex: ';
|
|
2567
|
+
- regex: '; {0,2}(SH\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2396
2568
|
device_replacement: '$1'
|
|
2397
2569
|
brand_replacement: 'Sharp'
|
|
2398
2570
|
model_replacement: '$1'
|
|
2399
|
-
- regex: ';
|
|
2571
|
+
- regex: '; {0,2}(SO\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2400
2572
|
device_replacement: '$1'
|
|
2401
2573
|
brand_replacement: 'SonyEricsson'
|
|
2402
2574
|
model_replacement: '$1'
|
|
2403
|
-
- regex: ';
|
|
2575
|
+
- regex: '; {0,2}(T\-0[12][^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2404
2576
|
device_replacement: '$1'
|
|
2405
2577
|
brand_replacement: 'Toshiba'
|
|
2406
2578
|
model_replacement: '$1'
|
|
@@ -2409,7 +2581,7 @@ device_parsers:
|
|
|
2409
2581
|
# DOOV
|
|
2410
2582
|
# @ref: http://www.doov.com.cn/
|
|
2411
2583
|
#########
|
|
2412
|
-
- regex: ';
|
|
2584
|
+
- regex: '; {0,2}(DOOV)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2413
2585
|
device_replacement: '$1 $2'
|
|
2414
2586
|
brand_replacement: 'DOOV'
|
|
2415
2587
|
model_replacement: '$2'
|
|
@@ -2418,7 +2590,7 @@ device_parsers:
|
|
|
2418
2590
|
# Enot
|
|
2419
2591
|
# @ref: http://www.enot.ua/
|
|
2420
2592
|
#########
|
|
2421
|
-
- regex: ';
|
|
2593
|
+
- regex: '; {0,2}(Enot|ENOT)[ -]?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2422
2594
|
device_replacement: '$1 $2'
|
|
2423
2595
|
brand_replacement: 'Enot'
|
|
2424
2596
|
model_replacement: '$2'
|
|
@@ -2427,11 +2599,11 @@ device_parsers:
|
|
|
2427
2599
|
# Evercoss
|
|
2428
2600
|
# @ref: http://evercoss.com/android/
|
|
2429
2601
|
#########
|
|
2430
|
-
- regex: ';
|
|
2602
|
+
- regex: '; {0,2}[^;/]{1,100} Build/(?:CROSS|Cross)+[ _\-]([^\)]+)'
|
|
2431
2603
|
device_replacement: 'CROSS $1'
|
|
2432
2604
|
brand_replacement: 'Evercoss'
|
|
2433
2605
|
model_replacement: 'Cross $1'
|
|
2434
|
-
- regex: ';
|
|
2606
|
+
- regex: '; {0,2}(CROSS|Cross)[ _\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2435
2607
|
device_replacement: '$1 $2'
|
|
2436
2608
|
brand_replacement: 'Evercoss'
|
|
2437
2609
|
model_replacement: 'Cross $2'
|
|
@@ -2440,7 +2612,7 @@ device_parsers:
|
|
|
2440
2612
|
# Explay
|
|
2441
2613
|
# @ref: http://explay.ru/
|
|
2442
2614
|
#########
|
|
2443
|
-
- regex: ';
|
|
2615
|
+
- regex: '; {0,2}Explay[_ ](.{1,200}?)(?:[\)]| Build)'
|
|
2444
2616
|
device_replacement: '$1'
|
|
2445
2617
|
brand_replacement: 'Explay'
|
|
2446
2618
|
model_replacement: '$1'
|
|
@@ -2449,11 +2621,11 @@ device_parsers:
|
|
|
2449
2621
|
# Fly
|
|
2450
2622
|
# @ref: http://www.fly-phone.com/
|
|
2451
2623
|
#########
|
|
2452
|
-
- regex: ';
|
|
2624
|
+
- regex: '; {0,2}(IQ.{0,200}?)(?: Build|\) AppleWebKit)'
|
|
2453
2625
|
device_replacement: '$1'
|
|
2454
2626
|
brand_replacement: 'Fly'
|
|
2455
2627
|
model_replacement: '$1'
|
|
2456
|
-
- regex: ';
|
|
2628
|
+
- regex: '; {0,2}(Fly|FLY)[ _](IQ[^;]{1,100}?|F[34]\d+[^;]{0,100}?);?(?: Build|\) AppleWebKit)'
|
|
2457
2629
|
device_replacement: '$1 $2'
|
|
2458
2630
|
brand_replacement: 'Fly'
|
|
2459
2631
|
model_replacement: '$2'
|
|
@@ -2462,7 +2634,7 @@ device_parsers:
|
|
|
2462
2634
|
# Fujitsu
|
|
2463
2635
|
# @ref: http://www.fujitsu.com/global/
|
|
2464
2636
|
#########
|
|
2465
|
-
- regex: ';
|
|
2637
|
+
- regex: '; {0,2}(M532|Q572|FJL21)(?: Build|\) AppleWebKit)'
|
|
2466
2638
|
device_replacement: '$1'
|
|
2467
2639
|
brand_replacement: 'Fujitsu'
|
|
2468
2640
|
model_replacement: '$1'
|
|
@@ -2471,7 +2643,7 @@ device_parsers:
|
|
|
2471
2643
|
# Galapad
|
|
2472
2644
|
# @ref: http://www.galapad.net/product.html
|
|
2473
2645
|
#########
|
|
2474
|
-
- regex: ';
|
|
2646
|
+
- regex: '; {0,2}(G1)(?: Build|\) AppleWebKit)'
|
|
2475
2647
|
device_replacement: '$1'
|
|
2476
2648
|
brand_replacement: 'Galapad'
|
|
2477
2649
|
model_replacement: '$1'
|
|
@@ -2480,7 +2652,7 @@ device_parsers:
|
|
|
2480
2652
|
# Geeksphone
|
|
2481
2653
|
# @ref: http://www.geeksphone.com/
|
|
2482
2654
|
#########
|
|
2483
|
-
- regex: ';
|
|
2655
|
+
- regex: '; {0,2}(Geeksphone) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2484
2656
|
device_replacement: '$1 $2'
|
|
2485
2657
|
brand_replacement: '$1'
|
|
2486
2658
|
model_replacement: '$2'
|
|
@@ -2489,8 +2661,7 @@ device_parsers:
|
|
|
2489
2661
|
# Gfive
|
|
2490
2662
|
# @ref: http://www.gfivemobile.com/en
|
|
2491
2663
|
#########
|
|
2492
|
-
|
|
2493
|
-
- regex: '; *(G[^F]?FIVE) ([^;/]+?)(?: Build|\) AppleWebKit)'
|
|
2664
|
+
- regex: '; {0,2}(G[^F]?FIVE) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2494
2665
|
device_replacement: '$1 $2'
|
|
2495
2666
|
brand_replacement: 'Gfive'
|
|
2496
2667
|
model_replacement: '$2'
|
|
@@ -2499,16 +2670,16 @@ device_parsers:
|
|
|
2499
2670
|
# Gionee
|
|
2500
2671
|
# @ref: http://www.gionee.com/
|
|
2501
2672
|
#########
|
|
2502
|
-
- regex: ';
|
|
2673
|
+
- regex: '; {0,2}(Gionee)[ _\-]([^;/]{1,100}?)(?:/[^;/]{1,100}|)(?: Build|\) AppleWebKit)'
|
|
2503
2674
|
regex_flag: 'i'
|
|
2504
2675
|
device_replacement: '$1 $2'
|
|
2505
2676
|
brand_replacement: 'Gionee'
|
|
2506
2677
|
model_replacement: '$2'
|
|
2507
|
-
- regex: ';
|
|
2678
|
+
- regex: '; {0,2}(GN\d+[A-Z]?|INFINITY_PASSION|Ctrl_V1)(?: Build|\) AppleWebKit)'
|
|
2508
2679
|
device_replacement: 'Gionee $1'
|
|
2509
2680
|
brand_replacement: 'Gionee'
|
|
2510
2681
|
model_replacement: '$1'
|
|
2511
|
-
- regex: ';
|
|
2682
|
+
- regex: '; {0,2}(E3) Build/JOP40D'
|
|
2512
2683
|
device_replacement: 'Gionee $1'
|
|
2513
2684
|
brand_replacement: 'Gionee'
|
|
2514
2685
|
model_replacement: '$1'
|
|
@@ -2522,11 +2693,11 @@ device_parsers:
|
|
|
2522
2693
|
# GoClever
|
|
2523
2694
|
# @ref: http://www.goclever.com
|
|
2524
2695
|
#########
|
|
2525
|
-
- regex: ';
|
|
2696
|
+
- regex: '; {0,2}((?:FONE|QUANTUM|INSIGNIA) \d+[^;/]{0,100}|PLAYTAB)(?: Build|\) AppleWebKit)'
|
|
2526
2697
|
device_replacement: 'GoClever $1'
|
|
2527
2698
|
brand_replacement: 'GoClever'
|
|
2528
2699
|
model_replacement: '$1'
|
|
2529
|
-
- regex: ';
|
|
2700
|
+
- regex: '; {0,2}GOCLEVER ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2530
2701
|
device_replacement: 'GoClever $1'
|
|
2531
2702
|
brand_replacement: 'GoClever'
|
|
2532
2703
|
model_replacement: '$1'
|
|
@@ -2535,20 +2706,24 @@ device_parsers:
|
|
|
2535
2706
|
# Google
|
|
2536
2707
|
# @ref: http://www.google.de/glass/start/
|
|
2537
2708
|
#########
|
|
2538
|
-
- regex: ';
|
|
2709
|
+
- regex: '; {0,2}(Glass \d+)(?: Build|\) AppleWebKit)'
|
|
2539
2710
|
device_replacement: '$1'
|
|
2540
2711
|
brand_replacement: 'Google'
|
|
2541
2712
|
model_replacement: '$1'
|
|
2542
|
-
- regex: ';
|
|
2543
|
-
device_replacement: '$
|
|
2713
|
+
- regex: '; {0,2}([g|G]oogle)? (Pixel[ a-zA-z0-9]{1,100});(?: Build|.{0,50}\) AppleWebKit)'
|
|
2714
|
+
device_replacement: '$2'
|
|
2544
2715
|
brand_replacement: 'Google'
|
|
2545
|
-
model_replacement: '$
|
|
2716
|
+
model_replacement: '$2'
|
|
2717
|
+
- regex: '; {0,2}([g|G]oogle)? (Pixel.{0,200}?)(?: Build|\) AppleWebKit)'
|
|
2718
|
+
device_replacement: '$2'
|
|
2719
|
+
brand_replacement: 'Google'
|
|
2720
|
+
model_replacement: '$2'
|
|
2546
2721
|
|
|
2547
2722
|
#########
|
|
2548
2723
|
# Gigabyte
|
|
2549
2724
|
# @ref: http://gsmart.gigabytecm.com/en/
|
|
2550
2725
|
#########
|
|
2551
|
-
- regex: ';
|
|
2726
|
+
- regex: '; {0,2}(GSmart)[ -]([^/]{1,50})(?: Build|\) AppleWebKit)'
|
|
2552
2727
|
device_replacement: '$1 $2'
|
|
2553
2728
|
brand_replacement: 'Gigabyte'
|
|
2554
2729
|
model_replacement: '$1 $2'
|
|
@@ -2557,7 +2732,7 @@ device_parsers:
|
|
|
2557
2732
|
# Freescale development boards
|
|
2558
2733
|
# @ref: http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=IMX53QSB
|
|
2559
2734
|
#########
|
|
2560
|
-
- regex: ';
|
|
2735
|
+
- regex: '; {0,2}(imx5[13]_[^/]{1,50})(?: Build|\) AppleWebKit)'
|
|
2561
2736
|
device_replacement: 'Freescale $1'
|
|
2562
2737
|
brand_replacement: 'Freescale'
|
|
2563
2738
|
model_replacement: '$1'
|
|
@@ -2567,11 +2742,11 @@ device_parsers:
|
|
|
2567
2742
|
# @ref: http://www.haier.com/
|
|
2568
2743
|
# @ref: http://www.haier.com/de/produkte/tablet/
|
|
2569
2744
|
#########
|
|
2570
|
-
- regex: ';
|
|
2745
|
+
- regex: '; {0,2}Haier[ _\-]([^/]{1,50})(?: Build|\) AppleWebKit)'
|
|
2571
2746
|
device_replacement: 'Haier $1'
|
|
2572
2747
|
brand_replacement: 'Haier'
|
|
2573
2748
|
model_replacement: '$1'
|
|
2574
|
-
- regex: ';
|
|
2749
|
+
- regex: '; {0,2}(PAD1016)(?: Build|\) AppleWebKit)'
|
|
2575
2750
|
device_replacement: 'Haipad $1'
|
|
2576
2751
|
brand_replacement: 'Haipad'
|
|
2577
2752
|
model_replacement: '$1'
|
|
@@ -2581,7 +2756,7 @@ device_parsers:
|
|
|
2581
2756
|
# @ref: http://www.haipad.net/
|
|
2582
2757
|
# @models: V7P|M7SM7S|M9XM9X|M7XM7X|M9|M8|M7-M|M1002|M7|M701
|
|
2583
2758
|
#########
|
|
2584
|
-
- regex: ';
|
|
2759
|
+
- regex: '; {0,2}(M701|M7|M8|M9)(?: Build|\) AppleWebKit)'
|
|
2585
2760
|
device_replacement: 'Haipad $1'
|
|
2586
2761
|
brand_replacement: 'Haipad'
|
|
2587
2762
|
model_replacement: '$1'
|
|
@@ -2591,7 +2766,7 @@ device_parsers:
|
|
|
2591
2766
|
# @ref: http://www.hannspree.eu/
|
|
2592
2767
|
# @models: SN10T1|SN10T2|SN70T31B|SN70T32W
|
|
2593
2768
|
#########
|
|
2594
|
-
- regex: ';
|
|
2769
|
+
- regex: '; {0,2}(SN\d+T[^;\)/]*)(?: Build|[;\)])'
|
|
2595
2770
|
device_replacement: 'Hannspree $1'
|
|
2596
2771
|
brand_replacement: 'Hannspree'
|
|
2597
2772
|
model_replacement: '$1'
|
|
@@ -2600,11 +2775,11 @@ device_parsers:
|
|
|
2600
2775
|
# HCLme
|
|
2601
2776
|
# @ref: http://www.hclmetablet.com/india/
|
|
2602
2777
|
#########
|
|
2603
|
-
- regex: 'Build/HCL ME Tablet ([^;\)]
|
|
2778
|
+
- regex: 'Build/HCL ME Tablet ([^;\)]{1,3})[\);]'
|
|
2604
2779
|
device_replacement: 'HCLme $1'
|
|
2605
2780
|
brand_replacement: 'HCLme'
|
|
2606
2781
|
model_replacement: '$1'
|
|
2607
|
-
- regex: ';
|
|
2782
|
+
- regex: '; {0,2}([^;\/]+) Build/HCL'
|
|
2608
2783
|
device_replacement: 'HCLme $1'
|
|
2609
2784
|
brand_replacement: 'HCLme'
|
|
2610
2785
|
model_replacement: '$1'
|
|
@@ -2613,7 +2788,7 @@ device_parsers:
|
|
|
2613
2788
|
# Hena
|
|
2614
2789
|
# @ref: http://www.henadigital.com/en/product/index.asp?id=6
|
|
2615
2790
|
#########
|
|
2616
|
-
- regex: ';
|
|
2791
|
+
- regex: '; {0,2}(MID-?\d{4}C[EM])(?: Build|\) AppleWebKit)'
|
|
2617
2792
|
device_replacement: 'Hena $1'
|
|
2618
2793
|
brand_replacement: 'Hena'
|
|
2619
2794
|
model_replacement: '$1'
|
|
@@ -2622,11 +2797,11 @@ device_parsers:
|
|
|
2622
2797
|
# Hisense
|
|
2623
2798
|
# @ref: http://www.hisense.com/
|
|
2624
2799
|
#########
|
|
2625
|
-
- regex: ';
|
|
2800
|
+
- regex: '; {0,2}(EG\d{2,}|HS-[^;/]{1,100}|MIRA[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2626
2801
|
device_replacement: 'Hisense $1'
|
|
2627
2802
|
brand_replacement: 'Hisense'
|
|
2628
2803
|
model_replacement: '$1'
|
|
2629
|
-
- regex: ';
|
|
2804
|
+
- regex: '; {0,2}(andromax[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2630
2805
|
regex_flag: 'i'
|
|
2631
2806
|
device_replacement: 'Hisense $1'
|
|
2632
2807
|
brand_replacement: 'Hisense'
|
|
@@ -2636,7 +2811,7 @@ device_parsers:
|
|
|
2636
2811
|
# hitech
|
|
2637
2812
|
# @ref: http://www.hitech-mobiles.com/
|
|
2638
2813
|
#########
|
|
2639
|
-
- regex: ';
|
|
2814
|
+
- regex: '; {0,2}(?:AMAZE[ _](S\d+)|(S\d+)[ _]AMAZE)(?: Build|\) AppleWebKit)'
|
|
2640
2815
|
device_replacement: 'AMAZE $1$2'
|
|
2641
2816
|
brand_replacement: 'hitech'
|
|
2642
2817
|
model_replacement: 'AMAZE $1$2'
|
|
@@ -2645,15 +2820,15 @@ device_parsers:
|
|
|
2645
2820
|
# HP
|
|
2646
2821
|
# @ref: http://www.hp.com/
|
|
2647
2822
|
#########
|
|
2648
|
-
- regex: ';
|
|
2823
|
+
- regex: '; {0,2}(PlayBook)(?: Build|\) AppleWebKit)'
|
|
2649
2824
|
device_replacement: 'HP $1'
|
|
2650
2825
|
brand_replacement: 'HP'
|
|
2651
2826
|
model_replacement: '$1'
|
|
2652
|
-
- regex: ';
|
|
2827
|
+
- regex: '; {0,2}HP ([^/]{1,50})(?: Build|\) AppleWebKit)'
|
|
2653
2828
|
device_replacement: 'HP $1'
|
|
2654
2829
|
brand_replacement: 'HP'
|
|
2655
2830
|
model_replacement: '$1'
|
|
2656
|
-
- regex: ';
|
|
2831
|
+
- regex: '; {0,2}([^/]{1,30}_tenderloin)(?: Build|\) AppleWebKit)'
|
|
2657
2832
|
device_replacement: 'HP TouchPad'
|
|
2658
2833
|
brand_replacement: 'HP'
|
|
2659
2834
|
model_replacement: 'TouchPad'
|
|
@@ -2663,62 +2838,66 @@ device_parsers:
|
|
|
2663
2838
|
# @ref: http://www.huaweidevice.com
|
|
2664
2839
|
# @note: Needs to be before HTC due to Desire HD Build on U8815
|
|
2665
2840
|
#########
|
|
2666
|
-
- regex: ';
|
|
2841
|
+
- regex: '; {0,2}(HUAWEI |Huawei-|)([UY][^;/]{1,100}) Build/(?:Huawei|HUAWEI)([UY][^\);]+)\)'
|
|
2667
2842
|
device_replacement: '$1$2'
|
|
2668
2843
|
brand_replacement: 'Huawei'
|
|
2669
2844
|
model_replacement: '$2'
|
|
2670
|
-
- regex: ';
|
|
2845
|
+
- regex: '; {0,2}([^;/]{1,100}) Build[/ ]Huawei(MT1-U06|[A-Z]{1,50}\d+[^\);]{1,50})\)'
|
|
2671
2846
|
device_replacement: '$1'
|
|
2672
2847
|
brand_replacement: 'Huawei'
|
|
2673
2848
|
model_replacement: '$2'
|
|
2674
|
-
- regex: ';
|
|
2849
|
+
- regex: '; {0,2}(S7|M860) Build'
|
|
2675
2850
|
device_replacement: '$1'
|
|
2676
2851
|
brand_replacement: 'Huawei'
|
|
2677
2852
|
model_replacement: '$1'
|
|
2678
|
-
- regex: ';
|
|
2853
|
+
- regex: '; {0,2}((?:HUAWEI|Huawei)[ \-]?)(MediaPad) Build'
|
|
2679
2854
|
device_replacement: '$1$2'
|
|
2680
2855
|
brand_replacement: 'Huawei'
|
|
2681
2856
|
model_replacement: '$2'
|
|
2682
|
-
- regex: ';
|
|
2857
|
+
- regex: '; {0,2}((?:HUAWEI[ _]?|Huawei[ _]|)Ascend[ _])([^;/]{1,100}) Build'
|
|
2683
2858
|
device_replacement: '$1$2'
|
|
2684
2859
|
brand_replacement: 'Huawei'
|
|
2685
2860
|
model_replacement: '$2'
|
|
2686
|
-
- regex: ';
|
|
2861
|
+
- regex: '; {0,2}((?:HUAWEI|Huawei)[ _\-]?)((?:G700-|MT-)[^;/]{1,100}) Build'
|
|
2687
2862
|
device_replacement: '$1$2'
|
|
2688
2863
|
brand_replacement: 'Huawei'
|
|
2689
2864
|
model_replacement: '$2'
|
|
2690
|
-
- regex: ';
|
|
2865
|
+
- regex: '; {0,2}((?:HUAWEI|Huawei)[ _\-]?)([^;/]{1,100}) Build'
|
|
2691
2866
|
device_replacement: '$1$2'
|
|
2692
2867
|
brand_replacement: 'Huawei'
|
|
2693
2868
|
model_replacement: '$2'
|
|
2694
|
-
- regex: ';
|
|
2869
|
+
- regex: '; {0,2}(MediaPad[^;]{1,200}|SpringBoard) Build/Huawei'
|
|
2695
2870
|
device_replacement: '$1'
|
|
2696
2871
|
brand_replacement: 'Huawei'
|
|
2697
2872
|
model_replacement: '$1'
|
|
2698
|
-
- regex: ';
|
|
2873
|
+
- regex: '; {0,2}([^;]{1,200}) Build/(?:Huawei|HUAWEI)'
|
|
2699
2874
|
device_replacement: '$1'
|
|
2700
2875
|
brand_replacement: 'Huawei'
|
|
2701
2876
|
model_replacement: '$1'
|
|
2702
|
-
- regex: ';
|
|
2877
|
+
- regex: '; {0,2}([Uu])([89]\d{3}) Build'
|
|
2703
2878
|
device_replacement: '$1$2'
|
|
2704
2879
|
brand_replacement: 'Huawei'
|
|
2705
2880
|
model_replacement: 'U$2'
|
|
2706
|
-
- regex: ';
|
|
2881
|
+
- regex: '; {0,2}(?:Ideos |IDEOS )(S7) Build'
|
|
2707
2882
|
device_replacement: 'Huawei Ideos$1'
|
|
2708
2883
|
brand_replacement: 'Huawei'
|
|
2709
2884
|
model_replacement: 'Ideos$1'
|
|
2710
|
-
- regex: ';
|
|
2885
|
+
- regex: '; {0,2}(?:Ideos |IDEOS )([^;/]{1,50}\s{0,5}|\s{0,5})Build'
|
|
2711
2886
|
device_replacement: 'Huawei Ideos$1'
|
|
2712
2887
|
brand_replacement: 'Huawei'
|
|
2713
2888
|
model_replacement: 'Ideos$1'
|
|
2714
|
-
- regex: ';
|
|
2889
|
+
- regex: '; {0,2}(Orange Daytona|Pulse|Pulse Mini|Vodafone 858|C8500|C8600|C8650|C8660|Nexus 6P|ATH-.{1,200}?) Build[/ ]'
|
|
2715
2890
|
device_replacement: 'Huawei $1'
|
|
2716
2891
|
brand_replacement: 'Huawei'
|
|
2717
2892
|
model_replacement: '$1'
|
|
2718
|
-
- regex: ';
|
|
2893
|
+
- regex: '; {0,2}((?:[A-Z]{3})\-L[A-Za0-9]{2})[\)]'
|
|
2719
2894
|
device_replacement: 'Huawei $1'
|
|
2720
2895
|
brand_replacement: 'Huawei'
|
|
2721
2896
|
model_replacement: '$1'
|
|
2897
|
+
- regex: '; {0,2}([^;]{1,200}) Build/(HONOR|Honor)'
|
|
2898
|
+
device_replacement: 'Huawei Honor $1'
|
|
2899
|
+
brand_replacement: 'Huawei'
|
|
2900
|
+
model_replacement: 'Honor $1'
|
|
2722
2901
|
|
|
2723
2902
|
#########
|
|
2724
2903
|
# HTC
|
|
@@ -2726,7 +2905,7 @@ device_parsers:
|
|
|
2726
2905
|
# @ref: http://en.wikipedia.org/wiki/List_of_HTC_phones
|
|
2727
2906
|
#########
|
|
2728
2907
|
|
|
2729
|
-
- regex: ';
|
|
2908
|
+
- regex: '; {0,2}HTC[ _]([^;]{1,200}); Windows Phone'
|
|
2730
2909
|
device_replacement: 'HTC $1'
|
|
2731
2910
|
brand_replacement: 'HTC'
|
|
2732
2911
|
model_replacement: '$1'
|
|
@@ -2734,59 +2913,59 @@ device_parsers:
|
|
|
2734
2913
|
# Android HTC with Version Number matcher
|
|
2735
2914
|
# ; HTC_0P3Z11/1.12.161.3 Build
|
|
2736
2915
|
# ;HTC_A3335 V2.38.841.1 Build
|
|
2737
|
-
- regex: ';
|
|
2916
|
+
- regex: '; {0,2}(?:HTC[ _/])+([^ _/]+)(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: {0,2}Build|\))'
|
|
2738
2917
|
device_replacement: 'HTC $1'
|
|
2739
2918
|
brand_replacement: 'HTC'
|
|
2740
2919
|
model_replacement: '$1'
|
|
2741
|
-
- regex: ';
|
|
2920
|
+
- regex: '; {0,2}(?:HTC[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)|)(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: {0,2}Build|\))'
|
|
2742
2921
|
device_replacement: 'HTC $1 $2'
|
|
2743
2922
|
brand_replacement: 'HTC'
|
|
2744
2923
|
model_replacement: '$1 $2'
|
|
2745
|
-
- regex: ';
|
|
2924
|
+
- regex: '; {0,2}(?:HTC[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)|)|)(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: {0,2}Build|\))'
|
|
2746
2925
|
device_replacement: 'HTC $1 $2 $3'
|
|
2747
2926
|
brand_replacement: 'HTC'
|
|
2748
2927
|
model_replacement: '$1 $2 $3'
|
|
2749
|
-
- regex: ';
|
|
2928
|
+
- regex: '; {0,2}(?:HTC[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)|)|)|)(?:[/\\]1\.0 | V|/| +)\d+\.\d[\d\.]*(?: {0,2}Build|\))'
|
|
2750
2929
|
device_replacement: 'HTC $1 $2 $3 $4'
|
|
2751
2930
|
brand_replacement: 'HTC'
|
|
2752
2931
|
model_replacement: '$1 $2 $3 $4'
|
|
2753
2932
|
|
|
2754
2933
|
# Android HTC without Version Number matcher
|
|
2755
|
-
- regex: ';
|
|
2934
|
+
- regex: '; {0,2}(?:(?:HTC|htc)(?:_blocked|)[ _/])+([^ _/;]+)(?: {0,2}Build|[;\)]| - )'
|
|
2756
2935
|
device_replacement: 'HTC $1'
|
|
2757
2936
|
brand_replacement: 'HTC'
|
|
2758
2937
|
model_replacement: '$1'
|
|
2759
|
-
- regex: ';
|
|
2938
|
+
- regex: '; {0,2}(?:(?:HTC|htc)(?:_blocked|)[ _/])+([^ _/]+)(?:[ _/]([^ _/;\)]+)|)(?: {0,2}Build|[;\)]| - )'
|
|
2760
2939
|
device_replacement: 'HTC $1 $2'
|
|
2761
2940
|
brand_replacement: 'HTC'
|
|
2762
2941
|
model_replacement: '$1 $2'
|
|
2763
|
-
- regex: ';
|
|
2942
|
+
- regex: '; {0,2}(?:(?:HTC|htc)(?:_blocked|)[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/;\)]+)|)|)(?: {0,2}Build|[;\)]| - )'
|
|
2764
2943
|
device_replacement: 'HTC $1 $2 $3'
|
|
2765
2944
|
brand_replacement: 'HTC'
|
|
2766
2945
|
model_replacement: '$1 $2 $3'
|
|
2767
|
-
- regex: ';
|
|
2946
|
+
- regex: '; {0,2}(?:(?:HTC|htc)(?:_blocked|)[ _/])+([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ _/]+)(?:[ _/]([^ /;]+)|)|)|)(?: {0,2}Build|[;\)]| - )'
|
|
2768
2947
|
device_replacement: 'HTC $1 $2 $3 $4'
|
|
2769
2948
|
brand_replacement: 'HTC'
|
|
2770
2949
|
model_replacement: '$1 $2 $3 $4'
|
|
2771
2950
|
|
|
2772
2951
|
# HTC Streaming Player
|
|
2773
|
-
- regex: 'HTC Streaming Player [^\/]
|
|
2952
|
+
- regex: 'HTC Streaming Player [^\/]{0,30}/[^\/]{0,10}/ htc_([^/]{1,10}) /'
|
|
2774
2953
|
device_replacement: 'HTC $1'
|
|
2775
2954
|
brand_replacement: 'HTC'
|
|
2776
2955
|
model_replacement: '$1'
|
|
2777
2956
|
# general matcher for anything else
|
|
2778
|
-
- regex: '(?:[;,]
|
|
2957
|
+
- regex: '(?:[;,] {0,2}|^)(?:htccn_chs-|)HTC[ _-]?([^;]{1,200}?)(?: {0,2}Build|clay|Android|-?Mozilla| Opera| Profile| UNTRUSTED|[;/\(\)]|$)'
|
|
2779
2958
|
regex_flag: 'i'
|
|
2780
2959
|
device_replacement: 'HTC $1'
|
|
2781
2960
|
brand_replacement: 'HTC'
|
|
2782
2961
|
model_replacement: '$1'
|
|
2783
2962
|
# Android matchers without HTC
|
|
2784
|
-
- regex: ';
|
|
2963
|
+
- 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|[/;\(\)])'
|
|
2785
2964
|
regex_flag: 'i'
|
|
2786
2965
|
device_replacement: 'HTC $1'
|
|
2787
2966
|
brand_replacement: 'HTC'
|
|
2788
2967
|
model_replacement: '$1'
|
|
2789
|
-
- regex: ';
|
|
2968
|
+
- 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)'
|
|
2790
2969
|
regex_flag: 'i'
|
|
2791
2970
|
device_replacement: 'HTC $1 $2'
|
|
2792
2971
|
brand_replacement: 'HTC'
|
|
@@ -2796,16 +2975,16 @@ device_parsers:
|
|
|
2796
2975
|
# Hyundai
|
|
2797
2976
|
# @ref: http://www.hyundaitechnologies.com
|
|
2798
2977
|
#########
|
|
2799
|
-
- regex: ';
|
|
2978
|
+
- regex: '; {0,2}HYUNDAI (T\d[^/]{0,10})(?: Build|\) AppleWebKit)'
|
|
2800
2979
|
device_replacement: 'Hyundai $1'
|
|
2801
2980
|
brand_replacement: 'Hyundai'
|
|
2802
2981
|
model_replacement: '$1'
|
|
2803
|
-
- regex: ';
|
|
2982
|
+
- regex: '; {0,2}HYUNDAI ([^;/]{1,10}?)(?: Build|\) AppleWebKit)'
|
|
2804
2983
|
device_replacement: 'Hyundai $1'
|
|
2805
2984
|
brand_replacement: 'Hyundai'
|
|
2806
2985
|
model_replacement: '$1'
|
|
2807
2986
|
# X900? http://www.amazon.com/Hyundai-X900-Retina-Android-Bluetooth/dp/B00AO07H3O
|
|
2808
|
-
- regex: ';
|
|
2987
|
+
- regex: '; {0,2}(X700|Hold X|MB-6900)(?: Build|\) AppleWebKit)'
|
|
2809
2988
|
device_replacement: 'Hyundai $1'
|
|
2810
2989
|
brand_replacement: 'Hyundai'
|
|
2811
2990
|
model_replacement: '$1'
|
|
@@ -2814,12 +2993,12 @@ device_parsers:
|
|
|
2814
2993
|
# iBall
|
|
2815
2994
|
# @ref: http://www.iball.co.in/Category/Mobiles/22
|
|
2816
2995
|
#########
|
|
2817
|
-
- regex: ';
|
|
2996
|
+
- regex: '; {0,2}(?:iBall[ _\-]|)(Andi)[ _]?(\d[^;/]*)(?: Build|\) AppleWebKit)'
|
|
2818
2997
|
regex_flag: 'i'
|
|
2819
2998
|
device_replacement: '$1 $2'
|
|
2820
2999
|
brand_replacement: 'iBall'
|
|
2821
3000
|
model_replacement: '$1 $2'
|
|
2822
|
-
- regex: ';
|
|
3001
|
+
- regex: '; {0,2}(IBall)(?:[ _]([^;/]{1,100}?)|)(?: Build|\) AppleWebKit)'
|
|
2823
3002
|
regex_flag: 'i'
|
|
2824
3003
|
device_replacement: '$1 $2'
|
|
2825
3004
|
brand_replacement: 'iBall'
|
|
@@ -2829,7 +3008,7 @@ device_parsers:
|
|
|
2829
3008
|
# IconBIT
|
|
2830
3009
|
# @ref: http://www.iconbit.com/catalog/tablets/
|
|
2831
3010
|
#########
|
|
2832
|
-
- regex: ';
|
|
3011
|
+
- regex: '; {0,2}(NT-\d+[^ ;/]{0,50}|Net[Tt]AB [^;/]{1,50}|Mercury [A-Z]{1,50}|iconBIT)(?: S/N:[^;/]{1,50}|)(?: Build|\) AppleWebKit)'
|
|
2833
3012
|
device_replacement: '$1'
|
|
2834
3013
|
brand_replacement: 'IconBIT'
|
|
2835
3014
|
model_replacement: '$1'
|
|
@@ -2838,7 +3017,7 @@ device_parsers:
|
|
|
2838
3017
|
# IMO
|
|
2839
3018
|
# @ref: http://www.ponselimo.com/
|
|
2840
3019
|
#########
|
|
2841
|
-
- regex: ';
|
|
3020
|
+
- regex: '; {0,2}(IMO)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2842
3021
|
regex_flag: 'i'
|
|
2843
3022
|
device_replacement: '$1 $2'
|
|
2844
3023
|
brand_replacement: 'IMO'
|
|
@@ -2848,12 +3027,12 @@ device_parsers:
|
|
|
2848
3027
|
# i-mobile
|
|
2849
3028
|
# @ref: http://www.i-mobilephone.com/
|
|
2850
3029
|
#########
|
|
2851
|
-
- regex: ';
|
|
3030
|
+
- regex: '; {0,2}i-?mobile[ _]([^/]{1,50})(?: Build|\) AppleWebKit)'
|
|
2852
3031
|
regex_flag: 'i'
|
|
2853
3032
|
device_replacement: 'i-mobile $1'
|
|
2854
3033
|
brand_replacement: 'imobile'
|
|
2855
3034
|
model_replacement: '$1'
|
|
2856
|
-
- regex: ';
|
|
3035
|
+
- regex: '; {0,2}(i-(?:style|note)[^/]{0,10})(?: Build|\) AppleWebKit)'
|
|
2857
3036
|
regex_flag: 'i'
|
|
2858
3037
|
device_replacement: 'i-mobile $1'
|
|
2859
3038
|
brand_replacement: 'imobile'
|
|
@@ -2863,7 +3042,7 @@ device_parsers:
|
|
|
2863
3042
|
# Impression
|
|
2864
3043
|
# @ref: http://impression.ua/planshetnye-kompyutery
|
|
2865
3044
|
#########
|
|
2866
|
-
- regex: ';
|
|
3045
|
+
- regex: '; {0,2}(ImPAD) ?(\d+(?:.){0,100}?)(?: Build|\) AppleWebKit)'
|
|
2867
3046
|
device_replacement: '$1 $2'
|
|
2868
3047
|
brand_replacement: 'Impression'
|
|
2869
3048
|
model_replacement: '$1 $2'
|
|
@@ -2872,7 +3051,7 @@ device_parsers:
|
|
|
2872
3051
|
# Infinix
|
|
2873
3052
|
# @ref: http://www.infinixmobility.com/index.html
|
|
2874
3053
|
#########
|
|
2875
|
-
- regex: ';
|
|
3054
|
+
- regex: '; {0,2}(Infinix)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2876
3055
|
device_replacement: '$1 $2'
|
|
2877
3056
|
brand_replacement: 'Infinix'
|
|
2878
3057
|
model_replacement: '$2'
|
|
@@ -2881,7 +3060,7 @@ device_parsers:
|
|
|
2881
3060
|
# Informer
|
|
2882
3061
|
# @ref: ??
|
|
2883
3062
|
#########
|
|
2884
|
-
- regex: ';
|
|
3063
|
+
- regex: '; {0,2}(Informer)[ \-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2885
3064
|
device_replacement: '$1 $2'
|
|
2886
3065
|
brand_replacement: 'Informer'
|
|
2887
3066
|
model_replacement: '$2'
|
|
@@ -2891,7 +3070,7 @@ device_parsers:
|
|
|
2891
3070
|
# @ref: http://www.intenso.de
|
|
2892
3071
|
# @models: 7":TAB 714,TAB 724;8":TAB 814,TAB 824;10":TAB 1004
|
|
2893
3072
|
#########
|
|
2894
|
-
- regex: ';
|
|
3073
|
+
- regex: '; {0,2}(TAB) ?([78][12]4)(?: Build|\) AppleWebKit)'
|
|
2895
3074
|
device_replacement: 'Intenso $1'
|
|
2896
3075
|
brand_replacement: 'Intenso'
|
|
2897
3076
|
model_replacement: '$1 $2'
|
|
@@ -2902,21 +3081,21 @@ device_parsers:
|
|
|
2902
3081
|
# @note: Zync also offers a "Cloud Z5" device
|
|
2903
3082
|
#########
|
|
2904
3083
|
# smartphones
|
|
2905
|
-
- regex: ';
|
|
3084
|
+
- regex: '; {0,2}(?:Intex[ _]|)(AQUA|Aqua)([ _\.\-])([^;/]{1,100}?) {0,2}(?:Build|;)'
|
|
2906
3085
|
device_replacement: '$1$2$3'
|
|
2907
3086
|
brand_replacement: 'Intex'
|
|
2908
3087
|
model_replacement: '$1 $3'
|
|
2909
3088
|
# matches "INTEX CLOUD X1"
|
|
2910
|
-
- regex: ';
|
|
3089
|
+
- regex: '; {0,2}(?:INTEX|Intex)(?:[_ ]([^\ _;/]+))(?:[_ ]([^\ _;/]+)|) {0,2}(?:Build|;)'
|
|
2911
3090
|
device_replacement: '$1 $2'
|
|
2912
3091
|
brand_replacement: 'Intex'
|
|
2913
3092
|
model_replacement: '$1 $2'
|
|
2914
3093
|
# tablets
|
|
2915
|
-
- regex: ';
|
|
3094
|
+
- regex: '; {0,2}([iI]Buddy)[ _]?(Connect)(?:_|\?_| |)([^;/]{0,50}) {0,2}(?:Build|;)'
|
|
2916
3095
|
device_replacement: '$1 $2 $3'
|
|
2917
3096
|
brand_replacement: 'Intex'
|
|
2918
3097
|
model_replacement: 'iBuddy $2 $3'
|
|
2919
|
-
- regex: ';
|
|
3098
|
+
- regex: '; {0,2}(I-Buddy)[ _]([^;/]{1,100}?) {0,2}(?:Build|;)'
|
|
2920
3099
|
device_replacement: '$1 $2'
|
|
2921
3100
|
brand_replacement: 'Intex'
|
|
2922
3101
|
model_replacement: 'iBuddy $2'
|
|
@@ -2925,7 +3104,7 @@ device_parsers:
|
|
|
2925
3104
|
# iOCEAN
|
|
2926
3105
|
# @ref: http://www.iocean.cc/
|
|
2927
3106
|
#########
|
|
2928
|
-
- regex: ';
|
|
3107
|
+
- regex: '; {0,2}(iOCEAN) ([^/]{1,50})(?: Build|\) AppleWebKit)'
|
|
2929
3108
|
regex_flag: 'i'
|
|
2930
3109
|
device_replacement: '$1 $2'
|
|
2931
3110
|
brand_replacement: 'iOCEAN'
|
|
@@ -2935,7 +3114,7 @@ device_parsers:
|
|
|
2935
3114
|
# i.onik
|
|
2936
3115
|
# @ref: http://www.i-onik.de/
|
|
2937
3116
|
#########
|
|
2938
|
-
- regex: ';
|
|
3117
|
+
- regex: '; {0,2}(TP\d+(?:\.\d+|)\-\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2939
3118
|
device_replacement: 'ionik $1'
|
|
2940
3119
|
brand_replacement: 'ionik'
|
|
2941
3120
|
model_replacement: '$1'
|
|
@@ -2944,7 +3123,7 @@ device_parsers:
|
|
|
2944
3123
|
# IRU.ru
|
|
2945
3124
|
# @ref: http://www.iru.ru/catalog/soho/planetable/
|
|
2946
3125
|
#########
|
|
2947
|
-
- regex: ';
|
|
3126
|
+
- regex: '; {0,2}(M702pro)(?: Build|\) AppleWebKit)'
|
|
2948
3127
|
device_replacement: '$1'
|
|
2949
3128
|
brand_replacement: 'Iru'
|
|
2950
3129
|
model_replacement: '$1'
|
|
@@ -2953,7 +3132,7 @@ device_parsers:
|
|
|
2953
3132
|
# Itel Mobile
|
|
2954
3133
|
# @ref: https://www.itel-mobile.com/global/products/
|
|
2955
3134
|
#########
|
|
2956
|
-
- regex: ';
|
|
3135
|
+
- regex: '; {0,2}itel ([^;/]*)(?: Build|\) AppleWebKit)'
|
|
2957
3136
|
device_replacement: 'Itel $1'
|
|
2958
3137
|
brand_replacement: 'Itel'
|
|
2959
3138
|
model_replacement: '$1'
|
|
@@ -2963,11 +3142,11 @@ device_parsers:
|
|
|
2963
3142
|
# @ref: http://www.ivio.com/mobile.php
|
|
2964
3143
|
# @models: DG80,DG20,DE38,DE88,MD70
|
|
2965
3144
|
#########
|
|
2966
|
-
- regex: ';
|
|
3145
|
+
- regex: '; {0,2}(DE88Plus|MD70)(?: Build|\) AppleWebKit)'
|
|
2967
3146
|
device_replacement: '$1'
|
|
2968
3147
|
brand_replacement: 'Ivio'
|
|
2969
3148
|
model_replacement: '$1'
|
|
2970
|
-
- regex: ';
|
|
3149
|
+
- regex: '; {0,2}IVIO[_\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2971
3150
|
device_replacement: '$1'
|
|
2972
3151
|
brand_replacement: 'Ivio'
|
|
2973
3152
|
model_replacement: '$1'
|
|
@@ -2976,7 +3155,7 @@ device_parsers:
|
|
|
2976
3155
|
# Jaytech
|
|
2977
3156
|
# @ref: http://www.jay-tech.de/jaytech/servlet/frontend/
|
|
2978
3157
|
#########
|
|
2979
|
-
- regex: ';
|
|
3158
|
+
- regex: '; {0,2}(TPC-\d+|JAY-TECH)(?: Build|\) AppleWebKit)'
|
|
2980
3159
|
device_replacement: '$1'
|
|
2981
3160
|
brand_replacement: 'Jaytech'
|
|
2982
3161
|
model_replacement: '$1'
|
|
@@ -2985,7 +3164,7 @@ device_parsers:
|
|
|
2985
3164
|
# Jiayu
|
|
2986
3165
|
# @ref: http://www.ejiayu.com/en/Product.html
|
|
2987
3166
|
#########
|
|
2988
|
-
- regex: ';
|
|
3167
|
+
- regex: '; {0,2}(JY-[^;/]{1,100}|G[234]S?)(?: Build|\) AppleWebKit)'
|
|
2989
3168
|
device_replacement: '$1'
|
|
2990
3169
|
brand_replacement: 'Jiayu'
|
|
2991
3170
|
model_replacement: '$1'
|
|
@@ -2994,7 +3173,7 @@ device_parsers:
|
|
|
2994
3173
|
# JXD
|
|
2995
3174
|
# @ref: http://www.jxd.hk/
|
|
2996
3175
|
#########
|
|
2997
|
-
- regex: ';
|
|
3176
|
+
- regex: '; {0,2}(JXD)[ _\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
2998
3177
|
device_replacement: '$1 $2'
|
|
2999
3178
|
brand_replacement: 'JXD'
|
|
3000
3179
|
model_replacement: '$2'
|
|
@@ -3003,16 +3182,16 @@ device_parsers:
|
|
|
3003
3182
|
# Karbonn
|
|
3004
3183
|
# @ref: http://www.karbonnmobiles.com/products_tablet.php
|
|
3005
3184
|
#########
|
|
3006
|
-
- regex: ';
|
|
3185
|
+
- regex: '; {0,2}Karbonn[ _]?([^;/]{1,100}) {0,2}(?:Build|;)'
|
|
3007
3186
|
regex_flag: 'i'
|
|
3008
3187
|
device_replacement: '$1'
|
|
3009
3188
|
brand_replacement: 'Karbonn'
|
|
3010
3189
|
model_replacement: '$1'
|
|
3011
|
-
- regex: ';
|
|
3190
|
+
- regex: '; {0,2}([^;]{1,200}) Build/Karbonn'
|
|
3012
3191
|
device_replacement: '$1'
|
|
3013
3192
|
brand_replacement: 'Karbonn'
|
|
3014
3193
|
model_replacement: '$1'
|
|
3015
|
-
- regex: ';
|
|
3194
|
+
- regex: '; {0,2}(A11|A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2|Titanium S\d) +Build'
|
|
3016
3195
|
device_replacement: '$1'
|
|
3017
3196
|
brand_replacement: 'Karbonn'
|
|
3018
3197
|
model_replacement: '$1'
|
|
@@ -3021,84 +3200,84 @@ device_parsers:
|
|
|
3021
3200
|
# KDDI (Operator Branded Device)
|
|
3022
3201
|
# @ref: http://www.ipentec.com/document/document.aspx?page=android-useragent
|
|
3023
3202
|
#########
|
|
3024
|
-
- regex: ';
|
|
3203
|
+
- regex: '; {0,2}(IS01|IS03|IS05|IS\d{2}SH)(?: Build|\) AppleWebKit)'
|
|
3025
3204
|
device_replacement: '$1'
|
|
3026
3205
|
brand_replacement: 'Sharp'
|
|
3027
3206
|
model_replacement: '$1'
|
|
3028
|
-
- regex: ';
|
|
3207
|
+
- regex: '; {0,2}(IS04)(?: Build|\) AppleWebKit)'
|
|
3029
3208
|
device_replacement: '$1'
|
|
3030
3209
|
brand_replacement: 'Regza'
|
|
3031
3210
|
model_replacement: '$1'
|
|
3032
|
-
- regex: ';
|
|
3211
|
+
- regex: '; {0,2}(IS06|IS\d{2}PT)(?: Build|\) AppleWebKit)'
|
|
3033
3212
|
device_replacement: '$1'
|
|
3034
3213
|
brand_replacement: 'Pantech'
|
|
3035
3214
|
model_replacement: '$1'
|
|
3036
|
-
- regex: ';
|
|
3215
|
+
- regex: '; {0,2}(IS11S)(?: Build|\) AppleWebKit)'
|
|
3037
3216
|
device_replacement: '$1'
|
|
3038
3217
|
brand_replacement: 'SonyEricsson'
|
|
3039
3218
|
model_replacement: 'Xperia Acro'
|
|
3040
|
-
- regex: ';
|
|
3219
|
+
- regex: '; {0,2}(IS11CA)(?: Build|\) AppleWebKit)'
|
|
3041
3220
|
device_replacement: '$1'
|
|
3042
3221
|
brand_replacement: 'Casio'
|
|
3043
3222
|
model_replacement: 'GzOne $1'
|
|
3044
|
-
- regex: ';
|
|
3223
|
+
- regex: '; {0,2}(IS11LG)(?: Build|\) AppleWebKit)'
|
|
3045
3224
|
device_replacement: '$1'
|
|
3046
3225
|
brand_replacement: 'LG'
|
|
3047
3226
|
model_replacement: 'Optimus X'
|
|
3048
|
-
- regex: ';
|
|
3227
|
+
- regex: '; {0,2}(IS11N)(?: Build|\) AppleWebKit)'
|
|
3049
3228
|
device_replacement: '$1'
|
|
3050
3229
|
brand_replacement: 'Medias'
|
|
3051
3230
|
model_replacement: '$1'
|
|
3052
|
-
- regex: ';
|
|
3231
|
+
- regex: '; {0,2}(IS11PT)(?: Build|\) AppleWebKit)'
|
|
3053
3232
|
device_replacement: '$1'
|
|
3054
3233
|
brand_replacement: 'Pantech'
|
|
3055
3234
|
model_replacement: 'MIRACH'
|
|
3056
|
-
- regex: ';
|
|
3235
|
+
- regex: '; {0,2}(IS12F)(?: Build|\) AppleWebKit)'
|
|
3057
3236
|
device_replacement: '$1'
|
|
3058
3237
|
brand_replacement: 'Fujitsu'
|
|
3059
3238
|
model_replacement: 'Arrows ES'
|
|
3060
3239
|
# @ref: https://ja.wikipedia.org/wiki/IS12M
|
|
3061
|
-
- regex: ';
|
|
3240
|
+
- regex: '; {0,2}(IS12M)(?: Build|\) AppleWebKit)'
|
|
3062
3241
|
device_replacement: '$1'
|
|
3063
3242
|
brand_replacement: 'Motorola'
|
|
3064
3243
|
model_replacement: 'XT909'
|
|
3065
|
-
- regex: ';
|
|
3244
|
+
- regex: '; {0,2}(IS12S)(?: Build|\) AppleWebKit)'
|
|
3066
3245
|
device_replacement: '$1'
|
|
3067
3246
|
brand_replacement: 'SonyEricsson'
|
|
3068
3247
|
model_replacement: 'Xperia Acro HD'
|
|
3069
|
-
- regex: ';
|
|
3248
|
+
- regex: '; {0,2}(ISW11F)(?: Build|\) AppleWebKit)'
|
|
3070
3249
|
device_replacement: '$1'
|
|
3071
3250
|
brand_replacement: 'Fujitsu'
|
|
3072
3251
|
model_replacement: 'Arrowz Z'
|
|
3073
|
-
- regex: ';
|
|
3252
|
+
- regex: '; {0,2}(ISW11HT)(?: Build|\) AppleWebKit)'
|
|
3074
3253
|
device_replacement: '$1'
|
|
3075
3254
|
brand_replacement: 'HTC'
|
|
3076
3255
|
model_replacement: 'EVO'
|
|
3077
|
-
- regex: ';
|
|
3256
|
+
- regex: '; {0,2}(ISW11K)(?: Build|\) AppleWebKit)'
|
|
3078
3257
|
device_replacement: '$1'
|
|
3079
3258
|
brand_replacement: 'Kyocera'
|
|
3080
3259
|
model_replacement: 'DIGNO'
|
|
3081
|
-
- regex: ';
|
|
3260
|
+
- regex: '; {0,2}(ISW11M)(?: Build|\) AppleWebKit)'
|
|
3082
3261
|
device_replacement: '$1'
|
|
3083
3262
|
brand_replacement: 'Motorola'
|
|
3084
3263
|
model_replacement: 'Photon'
|
|
3085
|
-
- regex: ';
|
|
3264
|
+
- regex: '; {0,2}(ISW11SC)(?: Build|\) AppleWebKit)'
|
|
3086
3265
|
device_replacement: '$1'
|
|
3087
3266
|
brand_replacement: 'Samsung'
|
|
3088
3267
|
model_replacement: 'GALAXY S II WiMAX'
|
|
3089
|
-
- regex: ';
|
|
3268
|
+
- regex: '; {0,2}(ISW12HT)(?: Build|\) AppleWebKit)'
|
|
3090
3269
|
device_replacement: '$1'
|
|
3091
3270
|
brand_replacement: 'HTC'
|
|
3092
3271
|
model_replacement: 'EVO 3D'
|
|
3093
|
-
- regex: ';
|
|
3272
|
+
- regex: '; {0,2}(ISW13HT)(?: Build|\) AppleWebKit)'
|
|
3094
3273
|
device_replacement: '$1'
|
|
3095
3274
|
brand_replacement: 'HTC'
|
|
3096
3275
|
model_replacement: 'J'
|
|
3097
|
-
- regex: ';
|
|
3276
|
+
- regex: '; {0,2}(ISW?[0-9]{2}[A-Z]{0,2})(?: Build|\) AppleWebKit)'
|
|
3098
3277
|
device_replacement: '$1'
|
|
3099
3278
|
brand_replacement: 'KDDI'
|
|
3100
3279
|
model_replacement: '$1'
|
|
3101
|
-
- regex: ';
|
|
3280
|
+
- regex: '; {0,2}(INFOBAR [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3102
3281
|
device_replacement: '$1'
|
|
3103
3282
|
brand_replacement: 'KDDI'
|
|
3104
3283
|
model_replacement: '$1'
|
|
@@ -3107,7 +3286,7 @@ device_parsers:
|
|
|
3107
3286
|
# Kingcom
|
|
3108
3287
|
# @ref: http://www.e-kingcom.com
|
|
3109
3288
|
#########
|
|
3110
|
-
- regex: ';
|
|
3289
|
+
- regex: '; {0,2}(JOYPAD|Joypad)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3111
3290
|
device_replacement: '$1 $2'
|
|
3112
3291
|
brand_replacement: 'Kingcom'
|
|
3113
3292
|
model_replacement: '$1 $2'
|
|
@@ -3117,7 +3296,7 @@ device_parsers:
|
|
|
3117
3296
|
# @ref: https://en.wikipedia.org/wiki/Kobo_Inc.
|
|
3118
3297
|
# @ref: http://www.kobo.com/devices#tablets
|
|
3119
3298
|
#########
|
|
3120
|
-
- regex: ';
|
|
3299
|
+
- regex: '; {0,2}(Vox|VOX|Arc|K080)(?: Build|\) AppleWebKit)'
|
|
3121
3300
|
regex_flag: 'i'
|
|
3122
3301
|
device_replacement: '$1'
|
|
3123
3302
|
brand_replacement: 'Kobo'
|
|
@@ -3131,7 +3310,7 @@ device_parsers:
|
|
|
3131
3310
|
# K-Touch
|
|
3132
3311
|
# @ref: ??
|
|
3133
3312
|
#########
|
|
3134
|
-
- regex: ';
|
|
3313
|
+
- regex: '; {0,2}(K-Touch)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3135
3314
|
regex_flag: 'i'
|
|
3136
3315
|
device_replacement: '$1 $2'
|
|
3137
3316
|
brand_replacement: 'Ktouch'
|
|
@@ -3141,7 +3320,7 @@ device_parsers:
|
|
|
3141
3320
|
# KT Tech
|
|
3142
3321
|
# @ref: http://www.kttech.co.kr
|
|
3143
3322
|
#########
|
|
3144
|
-
- regex: ';
|
|
3323
|
+
- regex: '; {0,2}((?:EV|KM)-S\d+[A-Z]?)(?: Build|\) AppleWebKit)'
|
|
3145
3324
|
regex_flag: 'i'
|
|
3146
3325
|
device_replacement: '$1'
|
|
3147
3326
|
brand_replacement: 'KTtech'
|
|
@@ -3151,7 +3330,7 @@ device_parsers:
|
|
|
3151
3330
|
# Kyocera
|
|
3152
3331
|
# @ref: http://www.android.com/devices/?country=all&m=kyocera
|
|
3153
3332
|
#########
|
|
3154
|
-
- regex: ';
|
|
3333
|
+
- regex: '; {0,2}(Zio|Hydro|Torque|Event|EVENT|Echo|Milano|Rise|URBANO PROGRESSO|WX04K|WX06K|WX10K|KYL21|101K|C5[12]\d{2})(?: Build|\) AppleWebKit)'
|
|
3155
3334
|
device_replacement: '$1'
|
|
3156
3335
|
brand_replacement: 'Kyocera'
|
|
3157
3336
|
model_replacement: '$1'
|
|
@@ -3160,12 +3339,12 @@ device_parsers:
|
|
|
3160
3339
|
# Lava
|
|
3161
3340
|
# @ref: http://www.lavamobiles.com/
|
|
3162
3341
|
#########
|
|
3163
|
-
- regex: ';
|
|
3342
|
+
- regex: '; {0,2}(?:LAVA[ _]|)IRIS[ _\-]?([^/;\)]+) {0,2}(?:;|\)|Build)'
|
|
3164
3343
|
regex_flag: 'i'
|
|
3165
3344
|
device_replacement: 'Iris $1'
|
|
3166
3345
|
brand_replacement: 'Lava'
|
|
3167
3346
|
model_replacement: 'Iris $1'
|
|
3168
|
-
- regex: ';
|
|
3347
|
+
- regex: '; {0,2}LAVA[ _]([^;/]{1,100}) Build'
|
|
3169
3348
|
device_replacement: '$1'
|
|
3170
3349
|
brand_replacement: 'Lava'
|
|
3171
3350
|
model_replacement: '$1'
|
|
@@ -3174,7 +3353,7 @@ device_parsers:
|
|
|
3174
3353
|
# Lemon
|
|
3175
3354
|
# @ref: http://www.lemonmobiles.com/products.php?type=1
|
|
3176
3355
|
#########
|
|
3177
|
-
- regex: ';
|
|
3356
|
+
- regex: '; {0,2}(?:(Aspire A1)|(?:LEMON|Lemon)[ _]([^;/]{1,100}))_?(?: Build|\) AppleWebKit)'
|
|
3178
3357
|
device_replacement: 'Lemon $1$2'
|
|
3179
3358
|
brand_replacement: 'Lemon'
|
|
3180
3359
|
model_replacement: '$1$2'
|
|
@@ -3183,11 +3362,11 @@ device_parsers:
|
|
|
3183
3362
|
# Lenco
|
|
3184
3363
|
# @ref: http://www.lenco.com/c/tablets/
|
|
3185
3364
|
#########
|
|
3186
|
-
- regex: ';
|
|
3365
|
+
- regex: '; {0,2}(TAB-1012)(?: Build|\) AppleWebKit)'
|
|
3187
3366
|
device_replacement: 'Lenco $1'
|
|
3188
3367
|
brand_replacement: 'Lenco'
|
|
3189
3368
|
model_replacement: '$1'
|
|
3190
|
-
- regex: '; Lenco ([^;/]
|
|
3369
|
+
- regex: '; Lenco ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3191
3370
|
device_replacement: 'Lenco $1'
|
|
3192
3371
|
brand_replacement: 'Lenco'
|
|
3193
3372
|
model_replacement: '$1'
|
|
@@ -3196,23 +3375,23 @@ device_parsers:
|
|
|
3196
3375
|
# Lenovo
|
|
3197
3376
|
# @ref: http://support.lenovo.com/en_GB/downloads/default.page?#
|
|
3198
3377
|
#########
|
|
3199
|
-
- regex: ';
|
|
3378
|
+
- regex: '; {0,2}(A1_07|A2107A-H|S2005A-H|S1-37AH0) Build'
|
|
3200
3379
|
device_replacement: '$1'
|
|
3201
3380
|
brand_replacement: 'Lenovo'
|
|
3202
3381
|
model_replacement: '$1'
|
|
3203
|
-
- regex: ';
|
|
3382
|
+
- regex: '; {0,2}(Idea[Tp]ab)[ _]([^;/]{1,100});? Build'
|
|
3204
3383
|
device_replacement: 'Lenovo $1 $2'
|
|
3205
3384
|
brand_replacement: 'Lenovo'
|
|
3206
3385
|
model_replacement: '$1 $2'
|
|
3207
|
-
- regex: ';
|
|
3386
|
+
- regex: '; {0,2}(Idea(?:Tab|pad)) ?([^;/]{1,100}) Build'
|
|
3208
3387
|
device_replacement: 'Lenovo $1 $2'
|
|
3209
3388
|
brand_replacement: 'Lenovo'
|
|
3210
3389
|
model_replacement: '$1 $2'
|
|
3211
|
-
- regex: ';
|
|
3390
|
+
- regex: '; {0,2}(ThinkPad) ?(Tablet) Build/'
|
|
3212
3391
|
device_replacement: 'Lenovo $1 $2'
|
|
3213
3392
|
brand_replacement: 'Lenovo'
|
|
3214
3393
|
model_replacement: '$1 $2'
|
|
3215
|
-
- regex: ';
|
|
3394
|
+
- regex: '; {0,2}(?:LNV-|)(?:=?[Ll]enovo[ _\-]?|LENOVO[ _])(.{1,200}?)(?:Build|[;/\)])'
|
|
3216
3395
|
device_replacement: 'Lenovo $1'
|
|
3217
3396
|
brand_replacement: 'Lenovo'
|
|
3218
3397
|
model_replacement: '$1'
|
|
@@ -3220,11 +3399,11 @@ device_parsers:
|
|
|
3220
3399
|
device_replacement: 'Lenovo $1 $2 $3'
|
|
3221
3400
|
brand_replacement: 'Lenovo'
|
|
3222
3401
|
model_replacement: '$1 $2 $3'
|
|
3223
|
-
- regex: ';
|
|
3402
|
+
- regex: '; {0,2}(?:Ideapad |)K1 Build/'
|
|
3224
3403
|
device_replacement: 'Lenovo Ideapad K1'
|
|
3225
3404
|
brand_replacement: 'Lenovo'
|
|
3226
3405
|
model_replacement: 'Ideapad K1'
|
|
3227
|
-
- regex: ';
|
|
3406
|
+
- regex: '; {0,2}(3GC101|3GW10[01]|A390) Build/'
|
|
3228
3407
|
device_replacement: '$1'
|
|
3229
3408
|
brand_replacement: 'Lenovo'
|
|
3230
3409
|
model_replacement: '$1'
|
|
@@ -3237,7 +3416,7 @@ device_parsers:
|
|
|
3237
3416
|
# Lexibook
|
|
3238
3417
|
# @ref: http://www.lexibook.com/fr
|
|
3239
3418
|
#########
|
|
3240
|
-
- regex: ';
|
|
3419
|
+
- regex: '; {0,2}(MFC\d+)[A-Z]{2}([^;,/]*),?(?: Build|\) AppleWebKit)'
|
|
3241
3420
|
device_replacement: '$1$2'
|
|
3242
3421
|
brand_replacement: 'Lexibook'
|
|
3243
3422
|
model_replacement: '$1$2'
|
|
@@ -3246,23 +3425,23 @@ device_parsers:
|
|
|
3246
3425
|
# LG
|
|
3247
3426
|
# @ref: http://www.lg.com/uk/mobile
|
|
3248
3427
|
#########
|
|
3249
|
-
- regex: ';
|
|
3428
|
+
- 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|;)'
|
|
3250
3429
|
device_replacement: '$1'
|
|
3251
3430
|
brand_replacement: 'LG'
|
|
3252
3431
|
model_replacement: '$1'
|
|
3253
|
-
- regex: '[;:]
|
|
3432
|
+
- regex: '[;:] {0,2}(L-\d+[A-Z]|LGL\d+[A-Z]?)(?:/V\d+|) {0,2}(?:Build|[;\)])'
|
|
3254
3433
|
device_replacement: '$1'
|
|
3255
3434
|
brand_replacement: 'LG'
|
|
3256
3435
|
model_replacement: '$1'
|
|
3257
|
-
- regex: ';
|
|
3436
|
+
- regex: '; {0,2}(LG-)([A-Z]{1,2}\d{2,}[^,;/\)\(]*?)(?:Build| V\d+|[,;/\)\(]|$)'
|
|
3258
3437
|
device_replacement: '$1$2'
|
|
3259
3438
|
brand_replacement: 'LG'
|
|
3260
3439
|
model_replacement: '$2'
|
|
3261
|
-
- regex: ';
|
|
3440
|
+
- regex: '; {0,2}(LG[ \-]|LG)([^;/]{1,100})[;/]? Build'
|
|
3262
3441
|
device_replacement: '$1$2'
|
|
3263
3442
|
brand_replacement: 'LG'
|
|
3264
3443
|
model_replacement: '$2'
|
|
3265
|
-
- regex: '^(LG)-([^;/]
|
|
3444
|
+
- regex: '^(LG)-([^;/]{1,100})/ Mozilla/.{0,200}; Android'
|
|
3266
3445
|
device_replacement: '$1 $2'
|
|
3267
3446
|
brand_replacement: 'LG'
|
|
3268
3447
|
model_replacement: '$2'
|
|
@@ -3275,11 +3454,11 @@ device_parsers:
|
|
|
3275
3454
|
# Malata
|
|
3276
3455
|
# @ref: http://www.malata.com/en/products.aspx?classid=680
|
|
3277
3456
|
#########
|
|
3278
|
-
- regex: ';
|
|
3457
|
+
- regex: '; {0,2}((?:SMB|smb)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3279
3458
|
device_replacement: '$1'
|
|
3280
3459
|
brand_replacement: 'Malata'
|
|
3281
3460
|
model_replacement: '$1'
|
|
3282
|
-
- regex: ';
|
|
3461
|
+
- regex: '; {0,2}(?:Malata|MALATA) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3283
3462
|
device_replacement: '$1'
|
|
3284
3463
|
brand_replacement: 'Malata'
|
|
3285
3464
|
model_replacement: '$1'
|
|
@@ -3288,7 +3467,7 @@ device_parsers:
|
|
|
3288
3467
|
# Manta
|
|
3289
3468
|
# @ref: http://www.manta.com.pl/en
|
|
3290
3469
|
#########
|
|
3291
|
-
- regex: ';
|
|
3470
|
+
- 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)'
|
|
3292
3471
|
device_replacement: '$1'
|
|
3293
3472
|
brand_replacement: 'Manta'
|
|
3294
3473
|
model_replacement: '$1'
|
|
@@ -3297,7 +3476,7 @@ device_parsers:
|
|
|
3297
3476
|
# Match
|
|
3298
3477
|
# @ref: http://www.match.net.cn/products.asp
|
|
3299
3478
|
#########
|
|
3300
|
-
- regex: ';
|
|
3479
|
+
- 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)'
|
|
3301
3480
|
device_replacement: '$1'
|
|
3302
3481
|
brand_replacement: 'Match'
|
|
3303
3482
|
model_replacement: '$1'
|
|
@@ -3311,7 +3490,7 @@ device_parsers:
|
|
|
3311
3490
|
# Maxx MT150, Maxx MQ601, Maxx M2020, Maxx Sleek MX463neo, Maxx MX525, Maxx MX192-Tune, Maxx Genx Droid 7 AX353,
|
|
3312
3491
|
# @note: Need more User-Agents!!!
|
|
3313
3492
|
#########
|
|
3314
|
-
- regex: ';
|
|
3493
|
+
- regex: '; {0,2}(GenxDroid7|MSD7.{0,200}?|AX\d.{0,200}?|Tab 701|Tab 722)(?: Build|\) AppleWebKit)'
|
|
3315
3494
|
device_replacement: 'Maxx $1'
|
|
3316
3495
|
brand_replacement: 'Maxx'
|
|
3317
3496
|
model_replacement: '$1'
|
|
@@ -3320,11 +3499,11 @@ device_parsers:
|
|
|
3320
3499
|
# Mediacom
|
|
3321
3500
|
# @ref: http://www.mediacomeurope.it/
|
|
3322
3501
|
#########
|
|
3323
|
-
- regex: ';
|
|
3502
|
+
- regex: '; {0,2}(M-PP[^;/]{1,30}|PhonePad ?\d{2,}[^;/]{1,30}?)(?: Build|\) AppleWebKit)'
|
|
3324
3503
|
device_replacement: 'Mediacom $1'
|
|
3325
3504
|
brand_replacement: 'Mediacom'
|
|
3326
3505
|
model_replacement: '$1'
|
|
3327
|
-
- regex: ';
|
|
3506
|
+
- regex: '; {0,2}(M-MP[^;/]{1,30}|SmartPad ?\d{2,}[^;/]{1,30}?)(?: Build|\) AppleWebKit)'
|
|
3328
3507
|
device_replacement: 'Mediacom $1'
|
|
3329
3508
|
brand_replacement: 'Mediacom'
|
|
3330
3509
|
model_replacement: '$1'
|
|
@@ -3333,12 +3512,12 @@ device_parsers:
|
|
|
3333
3512
|
# Medion
|
|
3334
3513
|
# @ref: http://www.medion.com/en/
|
|
3335
3514
|
#########
|
|
3336
|
-
- regex: ';
|
|
3515
|
+
- regex: '; {0,2}(?:MD_|)LIFETAB[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3337
3516
|
regex_flag: 'i'
|
|
3338
3517
|
device_replacement: 'Medion Lifetab $1'
|
|
3339
3518
|
brand_replacement: 'Medion'
|
|
3340
3519
|
model_replacement: 'Lifetab $1'
|
|
3341
|
-
- regex: ';
|
|
3520
|
+
- regex: '; {0,2}MEDION ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3342
3521
|
device_replacement: 'Medion $1'
|
|
3343
3522
|
brand_replacement: 'Medion'
|
|
3344
3523
|
model_replacement: '$1'
|
|
@@ -3347,11 +3526,11 @@ device_parsers:
|
|
|
3347
3526
|
# Meizu
|
|
3348
3527
|
# @ref: http://www.meizu.com
|
|
3349
3528
|
#########
|
|
3350
|
-
- regex: ';
|
|
3529
|
+
- regex: '; {0,2}(M030|M031|M035|M040|M065|m9)(?: Build|\) AppleWebKit)'
|
|
3351
3530
|
device_replacement: 'Meizu $1'
|
|
3352
3531
|
brand_replacement: 'Meizu'
|
|
3353
3532
|
model_replacement: '$1'
|
|
3354
|
-
- regex: ';
|
|
3533
|
+
- regex: '; {0,2}(?:meizu_|MEIZU )(.{1,200}?) {0,2}(?:Build|[;\)])'
|
|
3355
3534
|
device_replacement: 'Meizu $1'
|
|
3356
3535
|
brand_replacement: 'Meizu'
|
|
3357
3536
|
model_replacement: '$1'
|
|
@@ -3360,28 +3539,28 @@ device_parsers:
|
|
|
3360
3539
|
# Micromax
|
|
3361
3540
|
# @ref: http://www.micromaxinfo.com
|
|
3362
3541
|
#########
|
|
3363
|
-
- regex: ';
|
|
3542
|
+
- regex: '; {0,2}(?:Micromax[ _](A111|A240)|(A111|A240)) Build'
|
|
3364
3543
|
regex_flag: 'i'
|
|
3365
3544
|
device_replacement: 'Micromax $1$2'
|
|
3366
3545
|
brand_replacement: 'Micromax'
|
|
3367
3546
|
model_replacement: '$1$2'
|
|
3368
|
-
- regex: ';
|
|
3547
|
+
- regex: '; {0,2}Micromax[ _](A\d{2,3}[^;/]*) Build'
|
|
3369
3548
|
regex_flag: 'i'
|
|
3370
3549
|
device_replacement: 'Micromax $1'
|
|
3371
3550
|
brand_replacement: 'Micromax'
|
|
3372
3551
|
model_replacement: '$1'
|
|
3373
3552
|
# be carefull here with Acer e.g. A500
|
|
3374
|
-
- regex: ';
|
|
3553
|
+
- regex: '; {0,2}(A\d{2}|A[12]\d{2}|A90S|A110Q) Build'
|
|
3375
3554
|
regex_flag: 'i'
|
|
3376
3555
|
device_replacement: 'Micromax $1'
|
|
3377
3556
|
brand_replacement: 'Micromax'
|
|
3378
3557
|
model_replacement: '$1'
|
|
3379
|
-
- regex: ';
|
|
3558
|
+
- regex: '; {0,2}Micromax[ _](P\d{3}[^;/]*) Build'
|
|
3380
3559
|
regex_flag: 'i'
|
|
3381
3560
|
device_replacement: 'Micromax $1'
|
|
3382
3561
|
brand_replacement: 'Micromax'
|
|
3383
3562
|
model_replacement: '$1'
|
|
3384
|
-
- regex: ';
|
|
3563
|
+
- regex: '; {0,2}(P\d{3}|P\d{3}\(Funbook\)) Build'
|
|
3385
3564
|
regex_flag: 'i'
|
|
3386
3565
|
device_replacement: 'Micromax $1'
|
|
3387
3566
|
brand_replacement: 'Micromax'
|
|
@@ -3391,7 +3570,7 @@ device_parsers:
|
|
|
3391
3570
|
# Mito
|
|
3392
3571
|
# @ref: http://new.mitomobile.com/
|
|
3393
3572
|
#########
|
|
3394
|
-
- regex: ';
|
|
3573
|
+
- regex: '; {0,2}(MITO)[ _\-]?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3395
3574
|
regex_flag: 'i'
|
|
3396
3575
|
device_replacement: '$1 $2'
|
|
3397
3576
|
brand_replacement: 'Mito'
|
|
@@ -3401,7 +3580,7 @@ device_parsers:
|
|
|
3401
3580
|
# Mobistel
|
|
3402
3581
|
# @ref: http://www.mobistel.com/
|
|
3403
3582
|
#########
|
|
3404
|
-
- regex: ';
|
|
3583
|
+
- regex: '; {0,2}(Cynus)[ _](F5|T\d|.{1,200}?) {0,2}(?:Build|[;/\)])'
|
|
3405
3584
|
regex_flag: 'i'
|
|
3406
3585
|
device_replacement: '$1 $2'
|
|
3407
3586
|
brand_replacement: 'Mobistel'
|
|
@@ -3411,12 +3590,12 @@ device_parsers:
|
|
|
3411
3590
|
# Modecom
|
|
3412
3591
|
# @ref: http://www.modecom.eu/tablets/portal/
|
|
3413
3592
|
#########
|
|
3414
|
-
- regex: ';
|
|
3593
|
+
- regex: '; {0,2}(MODECOM |)(FreeTab) ?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3415
3594
|
regex_flag: 'i'
|
|
3416
3595
|
device_replacement: '$1$2 $3'
|
|
3417
3596
|
brand_replacement: 'Modecom'
|
|
3418
3597
|
model_replacement: '$2 $3'
|
|
3419
|
-
- regex: ';
|
|
3598
|
+
- regex: '; {0,2}(MODECOM )([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3420
3599
|
regex_flag: 'i'
|
|
3421
3600
|
device_replacement: '$1 $2'
|
|
3422
3601
|
brand_replacement: 'Modecom'
|
|
@@ -3426,32 +3605,32 @@ device_parsers:
|
|
|
3426
3605
|
# Motorola
|
|
3427
3606
|
# @ref: http://www.motorola.com/us/shop-all-mobile-phones/
|
|
3428
3607
|
#########
|
|
3429
|
-
- regex: ';
|
|
3608
|
+
- regex: '; {0,2}(MZ\d{3}\+?|MZ\d{3} 4G|Xoom|XOOM[^;/]*) Build'
|
|
3430
3609
|
device_replacement: 'Motorola $1'
|
|
3431
3610
|
brand_replacement: 'Motorola'
|
|
3432
3611
|
model_replacement: '$1'
|
|
3433
|
-
- regex: ';
|
|
3612
|
+
- regex: '; {0,2}(Milestone )(XT[^;/]*) Build'
|
|
3434
3613
|
device_replacement: 'Motorola $1$2'
|
|
3435
3614
|
brand_replacement: 'Motorola'
|
|
3436
3615
|
model_replacement: '$2'
|
|
3437
|
-
- regex: ';
|
|
3616
|
+
- regex: '; {0,2}(Motoroi ?x|Droid X|DROIDX) Build'
|
|
3438
3617
|
regex_flag: 'i'
|
|
3439
3618
|
device_replacement: 'Motorola $1'
|
|
3440
3619
|
brand_replacement: 'Motorola'
|
|
3441
3620
|
model_replacement: 'DROID X'
|
|
3442
|
-
- regex: ';
|
|
3621
|
+
- regex: '; {0,2}(Droid[^;/]*|DROID[^;/]*|Milestone[^;/]*|Photon|Triumph|Devour|Titanium) Build'
|
|
3443
3622
|
device_replacement: 'Motorola $1'
|
|
3444
3623
|
brand_replacement: 'Motorola'
|
|
3445
3624
|
model_replacement: '$1'
|
|
3446
|
-
- regex: ';
|
|
3625
|
+
- 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'
|
|
3447
3626
|
device_replacement: '$1'
|
|
3448
3627
|
brand_replacement: 'Motorola'
|
|
3449
3628
|
model_replacement: '$1'
|
|
3450
|
-
- regex: ';
|
|
3629
|
+
- regex: '; {0,2}(Motorola MOT-|Motorola[ _\-]|MOT\-?)([^;/]{1,100}) Build'
|
|
3451
3630
|
device_replacement: '$1$2'
|
|
3452
3631
|
brand_replacement: 'Motorola'
|
|
3453
3632
|
model_replacement: '$2'
|
|
3454
|
-
- regex: ';
|
|
3633
|
+
- regex: '; {0,2}(Moto[_ ]?|MOT\-)([^;/]{1,100}) Build'
|
|
3455
3634
|
device_replacement: '$1$2'
|
|
3456
3635
|
brand_replacement: 'Motorola'
|
|
3457
3636
|
model_replacement: '$2'
|
|
@@ -3460,7 +3639,7 @@ device_parsers:
|
|
|
3460
3639
|
# MpMan
|
|
3461
3640
|
# @ref: http://www.mpmaneurope.com
|
|
3462
3641
|
#########
|
|
3463
|
-
- regex: ';
|
|
3642
|
+
- 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)'
|
|
3464
3643
|
device_replacement: '$1'
|
|
3465
3644
|
brand_replacement: 'Mpman'
|
|
3466
3645
|
model_replacement: '$1'
|
|
@@ -3469,7 +3648,7 @@ device_parsers:
|
|
|
3469
3648
|
# MSI
|
|
3470
3649
|
# @ref: http://www.msi.com/product/windpad/
|
|
3471
3650
|
#########
|
|
3472
|
-
- regex: ';
|
|
3651
|
+
- regex: '; {0,2}(?:MSI[ _]|)(Primo\d+|Enjoy[ _\-][^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3473
3652
|
regex_flag: 'i'
|
|
3474
3653
|
device_replacement: '$1'
|
|
3475
3654
|
brand_replacement: 'Msi'
|
|
@@ -3479,7 +3658,7 @@ device_parsers:
|
|
|
3479
3658
|
# Multilaser
|
|
3480
3659
|
# http://www.multilaser.com.br/listagem_produtos.php?cat=5
|
|
3481
3660
|
#########
|
|
3482
|
-
- regex: ';
|
|
3661
|
+
- regex: '; {0,2}Multilaser[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3483
3662
|
device_replacement: '$1'
|
|
3484
3663
|
brand_replacement: 'Multilaser'
|
|
3485
3664
|
model_replacement: '$1'
|
|
@@ -3488,15 +3667,15 @@ device_parsers:
|
|
|
3488
3667
|
# MyPhone
|
|
3489
3668
|
# @ref: http://myphone.com.ph/
|
|
3490
3669
|
#########
|
|
3491
|
-
- regex: ';
|
|
3670
|
+
- regex: '; {0,2}(My)[_]?(Pad)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3492
3671
|
device_replacement: '$1$2 $3'
|
|
3493
3672
|
brand_replacement: 'MyPhone'
|
|
3494
3673
|
model_replacement: '$1$2 $3'
|
|
3495
|
-
- regex: ';
|
|
3674
|
+
- regex: '; {0,2}(My)\|?(Phone)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3496
3675
|
device_replacement: '$1$2 $3'
|
|
3497
3676
|
brand_replacement: 'MyPhone'
|
|
3498
3677
|
model_replacement: '$3'
|
|
3499
|
-
- regex: ';
|
|
3678
|
+
- regex: '; {0,2}(A\d+)[ _](Duo|)(?: Build|\) AppleWebKit)'
|
|
3500
3679
|
regex_flag: 'i'
|
|
3501
3680
|
device_replacement: '$1 $2'
|
|
3502
3681
|
brand_replacement: 'MyPhone'
|
|
@@ -3506,7 +3685,7 @@ device_parsers:
|
|
|
3506
3685
|
# Mytab
|
|
3507
3686
|
# @ref: http://www.mytab.eu/en/category/mytab-products/
|
|
3508
3687
|
#########
|
|
3509
|
-
- regex: ';
|
|
3688
|
+
- regex: '; {0,2}(myTab[^;/]*)(?: Build|\) AppleWebKit)'
|
|
3510
3689
|
device_replacement: '$1'
|
|
3511
3690
|
brand_replacement: 'Mytab'
|
|
3512
3691
|
model_replacement: '$1'
|
|
@@ -3515,7 +3694,7 @@ device_parsers:
|
|
|
3515
3694
|
# Nabi
|
|
3516
3695
|
# @ref: https://www.nabitablet.com
|
|
3517
3696
|
#########
|
|
3518
|
-
- regex: ';
|
|
3697
|
+
- regex: '; {0,2}(NABI2?-)([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3519
3698
|
device_replacement: '$1$2'
|
|
3520
3699
|
brand_replacement: 'Nabi'
|
|
3521
3700
|
model_replacement: '$2'
|
|
@@ -3524,15 +3703,15 @@ device_parsers:
|
|
|
3524
3703
|
# Nec Medias
|
|
3525
3704
|
# @ref: http://www.n-keitai.com/
|
|
3526
3705
|
#########
|
|
3527
|
-
- regex: ';
|
|
3706
|
+
- regex: '; {0,2}(N-\d+[CDE])(?: Build|\) AppleWebKit)'
|
|
3528
3707
|
device_replacement: '$1'
|
|
3529
3708
|
brand_replacement: 'Nec'
|
|
3530
3709
|
model_replacement: '$1'
|
|
3531
|
-
- regex: '; ?(NEC-)(
|
|
3710
|
+
- regex: '; ?(NEC-)(.{0,200}?)(?: Build|\) AppleWebKit)'
|
|
3532
3711
|
device_replacement: '$1$2'
|
|
3533
3712
|
brand_replacement: 'Nec'
|
|
3534
3713
|
model_replacement: '$2'
|
|
3535
|
-
- regex: ';
|
|
3714
|
+
- regex: '; {0,2}(LT-NA7)(?: Build|\) AppleWebKit)'
|
|
3536
3715
|
device_replacement: '$1'
|
|
3537
3716
|
brand_replacement: 'Nec'
|
|
3538
3717
|
model_replacement: 'Lifetouch Note'
|
|
@@ -3541,7 +3720,7 @@ device_parsers:
|
|
|
3541
3720
|
# Nextbook
|
|
3542
3721
|
# @ref: http://nextbookusa.com
|
|
3543
3722
|
#########
|
|
3544
|
-
- regex: ';
|
|
3723
|
+
- 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|[\);])'
|
|
3545
3724
|
device_replacement: '$1'
|
|
3546
3725
|
brand_replacement: 'Nextbook'
|
|
3547
3726
|
model_replacement: '$1'
|
|
@@ -3550,12 +3729,12 @@ device_parsers:
|
|
|
3550
3729
|
# Nokia
|
|
3551
3730
|
# @ref: http://www.nokia.com
|
|
3552
3731
|
#########
|
|
3553
|
-
- regex: ';
|
|
3732
|
+
- regex: '; {0,2}(Nokia)([ _\-]{0,5})([^;/]{0,50}) Build'
|
|
3554
3733
|
regex_flag: 'i'
|
|
3555
3734
|
device_replacement: '$1$2$3'
|
|
3556
3735
|
brand_replacement: 'Nokia'
|
|
3557
3736
|
model_replacement: '$3'
|
|
3558
|
-
- regex: ';
|
|
3737
|
+
- regex: '; {0,2}(TA\-\d{4})(?: Build|\) AppleWebKit)'
|
|
3559
3738
|
device_replacement: 'Nokia $1'
|
|
3560
3739
|
brand_replacement: 'Nokia'
|
|
3561
3740
|
model_replacement: '$1'
|
|
@@ -3565,11 +3744,11 @@ device_parsers:
|
|
|
3565
3744
|
# @ref:
|
|
3566
3745
|
# TODO nook browser/1.0
|
|
3567
3746
|
#########
|
|
3568
|
-
- regex: ';
|
|
3747
|
+
- regex: '; {0,2}(Nook ?|Barnes & Noble Nook |BN )([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3569
3748
|
device_replacement: '$1$2'
|
|
3570
3749
|
brand_replacement: 'Nook'
|
|
3571
3750
|
model_replacement: '$2'
|
|
3572
|
-
- regex: ';
|
|
3751
|
+
- regex: '; {0,2}(NOOK |)(BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2)(?: Build|\) AppleWebKit)'
|
|
3573
3752
|
device_replacement: '$1$2'
|
|
3574
3753
|
brand_replacement: 'Nook'
|
|
3575
3754
|
model_replacement: '$2'
|
|
@@ -3582,7 +3761,7 @@ device_parsers:
|
|
|
3582
3761
|
# Olivetti
|
|
3583
3762
|
# @ref: http://www.olivetti.de/EN/Page/t02/view_html?idp=348
|
|
3584
3763
|
#########
|
|
3585
|
-
- regex: ';
|
|
3764
|
+
- regex: '; {0,2}(OP110|OliPad[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3586
3765
|
device_replacement: 'Olivetti $1'
|
|
3587
3766
|
brand_replacement: 'Olivetti'
|
|
3588
3767
|
model_replacement: '$1'
|
|
@@ -3593,7 +3772,7 @@ device_parsers:
|
|
|
3593
3772
|
# @note: MID tablets might get matched by CobyKyros first
|
|
3594
3773
|
# @models: (T107|MID(?:700[2-5]|7031|7108|7132|750[02]|8001|8500|9001|971[12])
|
|
3595
3774
|
#########
|
|
3596
|
-
- regex: ';
|
|
3775
|
+
- regex: '; {0,2}OMEGA[ _\-](MID[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3597
3776
|
device_replacement: 'Omega $1'
|
|
3598
3777
|
brand_replacement: 'Omega'
|
|
3599
3778
|
model_replacement: '$1'
|
|
@@ -3606,7 +3785,7 @@ device_parsers:
|
|
|
3606
3785
|
# OpenPeak
|
|
3607
3786
|
# @ref: https://support.google.com/googleplay/answer/1727131?hl=en
|
|
3608
3787
|
#########
|
|
3609
|
-
- regex: ';
|
|
3788
|
+
- regex: '; {0,2}((?:CIUS|cius)[^;/]*)(?: Build|\) AppleWebKit)'
|
|
3610
3789
|
device_replacement: 'Openpeak $1'
|
|
3611
3790
|
brand_replacement: 'Openpeak'
|
|
3612
3791
|
model_replacement: '$1'
|
|
@@ -3615,18 +3794,18 @@ device_parsers:
|
|
|
3615
3794
|
# Oppo
|
|
3616
3795
|
# @ref: http://en.oppo.com/products/
|
|
3617
3796
|
#########
|
|
3618
|
-
- regex: ';
|
|
3797
|
+
- 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)'
|
|
3619
3798
|
device_replacement: 'Oppo $1'
|
|
3620
3799
|
brand_replacement: 'Oppo'
|
|
3621
3800
|
model_replacement: '$1'
|
|
3622
|
-
- regex: ';
|
|
3801
|
+
- regex: '; {0,2}OPPO ?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3623
3802
|
device_replacement: 'Oppo $1'
|
|
3624
3803
|
brand_replacement: 'Oppo'
|
|
3625
3804
|
model_replacement: '$1'
|
|
3626
|
-
- regex: ';
|
|
3805
|
+
- regex: '; {0,2}(CPH\d{1,4}|RMX\d{1,4}|P[A-Z]{3}\d{2})(?: Build|\) AppleWebKit)'
|
|
3627
3806
|
device_replacement: 'Oppo $1'
|
|
3628
3807
|
brand_replacement: 'Oppo'
|
|
3629
|
-
- regex: ';
|
|
3808
|
+
- regex: '; {0,2}(A1601)(?: Build|\) AppleWebKit)'
|
|
3630
3809
|
device_replacement: 'Oppo F1s'
|
|
3631
3810
|
brand_replacement: 'Oppo'
|
|
3632
3811
|
model_replacement: '$1'
|
|
@@ -3635,20 +3814,20 @@ device_parsers:
|
|
|
3635
3814
|
# Odys
|
|
3636
3815
|
# @ref: http://odys.de
|
|
3637
3816
|
#########
|
|
3638
|
-
- regex: ';
|
|
3817
|
+
- regex: '; {0,2}(?:Odys\-|ODYS\-|ODYS )([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3639
3818
|
device_replacement: 'Odys $1'
|
|
3640
3819
|
brand_replacement: 'Odys'
|
|
3641
3820
|
model_replacement: '$1'
|
|
3642
|
-
- regex: ';
|
|
3821
|
+
- regex: '; {0,2}(SELECT) ?(7)(?: Build|\) AppleWebKit)'
|
|
3643
3822
|
device_replacement: 'Odys $1 $2'
|
|
3644
3823
|
brand_replacement: 'Odys'
|
|
3645
3824
|
model_replacement: '$1 $2'
|
|
3646
|
-
- regex: ';
|
|
3825
|
+
- regex: '; {0,2}(PEDI)_(PLUS)_(W)(?: Build|\) AppleWebKit)'
|
|
3647
3826
|
device_replacement: 'Odys $1 $2 $3'
|
|
3648
3827
|
brand_replacement: 'Odys'
|
|
3649
3828
|
model_replacement: '$1 $2 $3'
|
|
3650
3829
|
# Weltbild - Tablet PC 4 = Cat Phoenix = Odys Tablet PC 4?
|
|
3651
|
-
- regex: ';
|
|
3830
|
+
- 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)'
|
|
3652
3831
|
device_replacement: 'Odys $1'
|
|
3653
3832
|
brand_replacement: 'Odys'
|
|
3654
3833
|
model_replacement: '$1'
|
|
@@ -3665,12 +3844,24 @@ device_parsers:
|
|
|
3665
3844
|
device_replacement: 'OnePlus $1'
|
|
3666
3845
|
brand_replacement: 'OnePlus'
|
|
3667
3846
|
model_replacement: '$1'
|
|
3847
|
+
- 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)'
|
|
3848
|
+
device_replacement: 'OnePlus $1'
|
|
3849
|
+
brand_replacement: 'OnePlus'
|
|
3850
|
+
model_replacement: 'OnePlus $1'
|
|
3851
|
+
- regex: '; (OnePlus[ a-zA-z0-9]{0,50});((?: Build|.{0,50}\) AppleWebKit))'
|
|
3852
|
+
device_replacement: '$1'
|
|
3853
|
+
brand_replacement: 'OnePlus'
|
|
3854
|
+
model_replacement: '$1'
|
|
3855
|
+
- regex: '; (OnePlus[ a-zA-z0-9]{0,50})((?: Build|\) AppleWebKit))'
|
|
3856
|
+
device_replacement: '$1'
|
|
3857
|
+
brand_replacement: 'OnePlus'
|
|
3858
|
+
model_replacement: '$1'
|
|
3668
3859
|
|
|
3669
3860
|
#########
|
|
3670
3861
|
# Orion
|
|
3671
3862
|
# @ref: http://www.orion.ua/en/products/computer-products/tablet-pcs.html
|
|
3672
3863
|
#########
|
|
3673
|
-
- regex: ';
|
|
3864
|
+
- regex: '; {0,2}(TP-\d+)(?: Build|\) AppleWebKit)'
|
|
3674
3865
|
device_replacement: 'Orion $1'
|
|
3675
3866
|
brand_replacement: 'Orion'
|
|
3676
3867
|
model_replacement: '$1'
|
|
@@ -3679,7 +3870,7 @@ device_parsers:
|
|
|
3679
3870
|
# PackardBell
|
|
3680
3871
|
# @ref: http://www.packardbell.com/pb/en/AE/content/productgroup/tablets
|
|
3681
3872
|
#########
|
|
3682
|
-
- regex: ';
|
|
3873
|
+
- regex: '; {0,2}(G100W?)(?: Build|\) AppleWebKit)'
|
|
3683
3874
|
device_replacement: 'PackardBell $1'
|
|
3684
3875
|
brand_replacement: 'PackardBell'
|
|
3685
3876
|
model_replacement: '$1'
|
|
@@ -3690,17 +3881,17 @@ device_parsers:
|
|
|
3690
3881
|
# @models: T11, T21, T31, P11, P51, Eluga Power, Eluga DL1
|
|
3691
3882
|
# @models: (tab) Toughpad FZ-A1, Toughpad JT-B1
|
|
3692
3883
|
#########
|
|
3693
|
-
- regex: ';
|
|
3884
|
+
- regex: '; {0,2}(Panasonic)[_ ]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3694
3885
|
device_replacement: '$1 $2'
|
|
3695
3886
|
brand_replacement: '$1'
|
|
3696
3887
|
model_replacement: '$2'
|
|
3697
3888
|
# Toughpad
|
|
3698
|
-
- regex: ';
|
|
3889
|
+
- regex: '; {0,2}(FZ-A1B|JT-B1)(?: Build|\) AppleWebKit)'
|
|
3699
3890
|
device_replacement: 'Panasonic $1'
|
|
3700
3891
|
brand_replacement: 'Panasonic'
|
|
3701
3892
|
model_replacement: '$1'
|
|
3702
3893
|
# Eluga Power
|
|
3703
|
-
- regex: ';
|
|
3894
|
+
- regex: '; {0,2}(dL1|DL1)(?: Build|\) AppleWebKit)'
|
|
3704
3895
|
device_replacement: 'Panasonic $1'
|
|
3705
3896
|
brand_replacement: 'Panasonic'
|
|
3706
3897
|
model_replacement: '$1'
|
|
@@ -3711,15 +3902,15 @@ device_parsers:
|
|
|
3711
3902
|
# @href: http://www.pantech.co.kr/en/prod/prodList.do?gbrand=VEGA
|
|
3712
3903
|
# @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
|
|
3713
3904
|
#########
|
|
3714
|
-
- regex: ';
|
|
3905
|
+
- regex: '; {0,2}(SKY[ _]|)(IM\-[AT]\d{3}[^;/]{1,100}).{0,30} Build/'
|
|
3715
3906
|
device_replacement: 'Pantech $1$2'
|
|
3716
3907
|
brand_replacement: 'Pantech'
|
|
3717
3908
|
model_replacement: '$1$2'
|
|
3718
|
-
- regex: ';
|
|
3909
|
+
- regex: '; {0,2}((?:ADR8995|ADR910L|ADR930L|ADR930VW|PTL21|P8000)(?: 4G|)) Build/'
|
|
3719
3910
|
device_replacement: '$1'
|
|
3720
3911
|
brand_replacement: 'Pantech'
|
|
3721
3912
|
model_replacement: '$1'
|
|
3722
|
-
- regex: ';
|
|
3913
|
+
- regex: '; {0,2}Pantech([^;/]{1,30}).{0,200}? Build/'
|
|
3723
3914
|
device_replacement: 'Pantech $1'
|
|
3724
3915
|
brand_replacement: 'Pantech'
|
|
3725
3916
|
model_replacement: '$1'
|
|
@@ -3728,7 +3919,7 @@ device_parsers:
|
|
|
3728
3919
|
# Papayre
|
|
3729
3920
|
# @ref: http://grammata.es/
|
|
3730
3921
|
#########
|
|
3731
|
-
- regex: ';
|
|
3922
|
+
- regex: '; {0,2}(papyre)[ _\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3732
3923
|
regex_flag: 'i'
|
|
3733
3924
|
device_replacement: '$1 $2'
|
|
3734
3925
|
brand_replacement: 'Papyre'
|
|
@@ -3738,7 +3929,7 @@ device_parsers:
|
|
|
3738
3929
|
# Pearl
|
|
3739
3930
|
# @ref: http://www.pearl.de/c-1540.shtml
|
|
3740
3931
|
#########
|
|
3741
|
-
- regex: ';
|
|
3932
|
+
- regex: '; {0,2}(?:Touchlet )?(X10\.[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3742
3933
|
device_replacement: 'Pearl $1'
|
|
3743
3934
|
brand_replacement: 'Pearl'
|
|
3744
3935
|
model_replacement: '$1'
|
|
@@ -3751,11 +3942,11 @@ device_parsers:
|
|
|
3751
3942
|
device_replacement: 'Phicomm $1'
|
|
3752
3943
|
brand_replacement: 'Phicomm'
|
|
3753
3944
|
model_replacement: '$1'
|
|
3754
|
-
- regex: '; PHICOMM ([^;/]
|
|
3945
|
+
- regex: '; PHICOMM ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3755
3946
|
device_replacement: 'Phicomm $1'
|
|
3756
3947
|
brand_replacement: 'Phicomm'
|
|
3757
3948
|
model_replacement: '$1'
|
|
3758
|
-
- regex: ';
|
|
3949
|
+
- regex: '; {0,2}(FWS\d{3}[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3759
3950
|
device_replacement: 'Phicomm $1'
|
|
3760
3951
|
brand_replacement: 'Phicomm'
|
|
3761
3952
|
model_replacement: '$1'
|
|
@@ -3767,11 +3958,11 @@ device_parsers:
|
|
|
3767
3958
|
# @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
|
|
3768
3959
|
#########
|
|
3769
3960
|
# @note: this a best guess according to available philips models. Need more User-Agents
|
|
3770
|
-
- regex: ';
|
|
3961
|
+
- 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)'
|
|
3771
3962
|
device_replacement: '$1'
|
|
3772
3963
|
brand_replacement: 'Philips'
|
|
3773
3964
|
model_replacement: '$1'
|
|
3774
|
-
- regex: ';
|
|
3965
|
+
- regex: '; {0,2}(?:Philips|PHILIPS)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3775
3966
|
device_replacement: 'Philips $1'
|
|
3776
3967
|
brand_replacement: 'Philips'
|
|
3777
3968
|
model_replacement: '$1'
|
|
@@ -3780,7 +3971,7 @@ device_parsers:
|
|
|
3780
3971
|
# Pipo
|
|
3781
3972
|
# @ref: http://www.pipo.cn/En/
|
|
3782
3973
|
#########
|
|
3783
|
-
- regex: 'Android 4
|
|
3974
|
+
- regex: 'Android 4\..{0,200}; {0,2}(M[12356789]|U[12368]|S[123])\ ?(pro)?(?: Build|\) AppleWebKit)'
|
|
3784
3975
|
device_replacement: 'Pipo $1$2'
|
|
3785
3976
|
brand_replacement: 'Pipo'
|
|
3786
3977
|
model_replacement: '$1$2'
|
|
@@ -3789,7 +3980,7 @@ device_parsers:
|
|
|
3789
3980
|
# Ployer
|
|
3790
3981
|
# @ref: http://en.ployer.cn/
|
|
3791
3982
|
#########
|
|
3792
|
-
- regex: ';
|
|
3983
|
+
- regex: '; {0,2}(MOMO[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3793
3984
|
device_replacement: '$1'
|
|
3794
3985
|
brand_replacement: 'Ployer'
|
|
3795
3986
|
model_replacement: '$1'
|
|
@@ -3798,11 +3989,11 @@ device_parsers:
|
|
|
3798
3989
|
# Polaroid/ Acho
|
|
3799
3990
|
# @ref: http://polaroidstore.com/store/start.asp?category_id=382&category_id2=0&order=title&filter1=&filter2=&filter3=&view=all
|
|
3800
3991
|
#########
|
|
3801
|
-
- regex: ';
|
|
3992
|
+
- regex: '; {0,2}(?:Polaroid[ _]|)((?:MIDC\d{3,}|PMID\d{2,}|PTAB\d{3,})[^;/]{0,30}?)(\/[^;/]{0,30}|)(?: Build|\) AppleWebKit)'
|
|
3802
3993
|
device_replacement: '$1'
|
|
3803
3994
|
brand_replacement: 'Polaroid'
|
|
3804
3995
|
model_replacement: '$1'
|
|
3805
|
-
- regex: ';
|
|
3996
|
+
- regex: '; {0,2}(?:Polaroid )(Tablet)(?: Build|\) AppleWebKit)'
|
|
3806
3997
|
device_replacement: '$1'
|
|
3807
3998
|
brand_replacement: 'Polaroid'
|
|
3808
3999
|
model_replacement: '$1'
|
|
@@ -3812,7 +4003,7 @@ device_parsers:
|
|
|
3812
4003
|
# @ref: http://pompmobileshop.com/
|
|
3813
4004
|
#########
|
|
3814
4005
|
#~ TODO
|
|
3815
|
-
- regex: ';
|
|
4006
|
+
- regex: '; {0,2}(POMP)[ _\-](.{1,200}?) {0,2}(?:Build|[;/\)])'
|
|
3816
4007
|
device_replacement: '$1 $2'
|
|
3817
4008
|
brand_replacement: 'Pomp'
|
|
3818
4009
|
model_replacement: '$2'
|
|
@@ -3821,11 +4012,11 @@ device_parsers:
|
|
|
3821
4012
|
# Positivo
|
|
3822
4013
|
# @ref: http://www.positivoinformatica.com.br/www/pessoal/tablet-ypy/
|
|
3823
4014
|
#########
|
|
3824
|
-
- regex: ';
|
|
4015
|
+
- regex: '; {0,2}(TB07STA|TB10STA|TB07FTA|TB10FTA)(?: Build|\) AppleWebKit)'
|
|
3825
4016
|
device_replacement: '$1'
|
|
3826
4017
|
brand_replacement: 'Positivo'
|
|
3827
4018
|
model_replacement: '$1'
|
|
3828
|
-
- regex: ';
|
|
4019
|
+
- regex: '; {0,2}(?:Positivo |)((?:YPY|Ypy)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3829
4020
|
device_replacement: '$1'
|
|
3830
4021
|
brand_replacement: 'Positivo'
|
|
3831
4022
|
model_replacement: '$1'
|
|
@@ -3835,15 +4026,15 @@ device_parsers:
|
|
|
3835
4026
|
# @ref: http://www.pointofview-online.com/default2.php
|
|
3836
4027
|
# @TODO: Smartphone Models MOB-3515, MOB-5045-B missing
|
|
3837
4028
|
#########
|
|
3838
|
-
- regex: ';
|
|
4029
|
+
- regex: '; {0,2}(MOB-[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3839
4030
|
device_replacement: '$1'
|
|
3840
4031
|
brand_replacement: 'POV'
|
|
3841
4032
|
model_replacement: '$1'
|
|
3842
|
-
- regex: ';
|
|
4033
|
+
- regex: '; {0,2}POV[ _\-]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3843
4034
|
device_replacement: 'POV $1'
|
|
3844
4035
|
brand_replacement: 'POV'
|
|
3845
4036
|
model_replacement: '$1'
|
|
3846
|
-
- regex: ';
|
|
4037
|
+
- regex: '; {0,2}((?:TAB-PLAYTAB|TAB-PROTAB|PROTAB|PlayTabPro|Mobii[ _\-]|TAB-P)[^;/]*)(?: Build|\) AppleWebKit)'
|
|
3847
4038
|
device_replacement: 'POV $1'
|
|
3848
4039
|
brand_replacement: 'POV'
|
|
3849
4040
|
model_replacement: '$1'
|
|
@@ -3853,7 +4044,7 @@ device_parsers:
|
|
|
3853
4044
|
# @ref: http://www.prestigio.com/catalogue/MultiPhones
|
|
3854
4045
|
# @ref: http://www.prestigio.com/catalogue/MultiPads
|
|
3855
4046
|
#########
|
|
3856
|
-
- regex: ';
|
|
4047
|
+
- regex: '; {0,2}(?:Prestigio |)((?:PAP|PMP)\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3857
4048
|
device_replacement: 'Prestigio $1'
|
|
3858
4049
|
brand_replacement: 'Prestigio'
|
|
3859
4050
|
model_replacement: '$1'
|
|
@@ -3862,7 +4053,7 @@ device_parsers:
|
|
|
3862
4053
|
# Proscan
|
|
3863
4054
|
# @ref: http://www.proscanvideo.com/products-search.asp?itemClass=TABLET&itemnmbr=
|
|
3864
4055
|
#########
|
|
3865
|
-
- regex: ';
|
|
4056
|
+
- regex: '; {0,2}(PLT[0-9]{4}.{0,200}?)(?: Build|\) AppleWebKit)'
|
|
3866
4057
|
device_replacement: '$1'
|
|
3867
4058
|
brand_replacement: 'Proscan'
|
|
3868
4059
|
model_replacement: '$1'
|
|
@@ -3871,15 +4062,15 @@ device_parsers:
|
|
|
3871
4062
|
# QMobile
|
|
3872
4063
|
# @ref: http://www.qmobile.com.pk/
|
|
3873
4064
|
#########
|
|
3874
|
-
- regex: ';
|
|
4065
|
+
- regex: '; {0,2}(A2|A5|A8|A900)_?(Classic|)(?: Build|\) AppleWebKit)'
|
|
3875
4066
|
device_replacement: '$1 $2'
|
|
3876
4067
|
brand_replacement: 'Qmobile'
|
|
3877
4068
|
model_replacement: '$1 $2'
|
|
3878
|
-
- regex: ';
|
|
4069
|
+
- regex: '; {0,2}(Q[Mm]obile)_([^_]+)_([^_]+?)(?: Build|\) AppleWebKit)'
|
|
3879
4070
|
device_replacement: 'Qmobile $2 $3'
|
|
3880
4071
|
brand_replacement: 'Qmobile'
|
|
3881
4072
|
model_replacement: '$2 $3'
|
|
3882
|
-
- regex: ';
|
|
4073
|
+
- regex: '; {0,2}(Q\-?[Mm]obile)[_ ](A[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3883
4074
|
device_replacement: 'Qmobile $2'
|
|
3884
4075
|
brand_replacement: 'Qmobile'
|
|
3885
4076
|
model_replacement: '$2'
|
|
@@ -3888,11 +4079,11 @@ device_parsers:
|
|
|
3888
4079
|
# Qmobilevn
|
|
3889
4080
|
# @ref: http://qmobile.vn/san-pham.html
|
|
3890
4081
|
#########
|
|
3891
|
-
- regex: ';
|
|
4082
|
+
- regex: '; {0,2}(Q\-Smart)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3892
4083
|
device_replacement: '$1 $2'
|
|
3893
4084
|
brand_replacement: 'Qmobilevn'
|
|
3894
4085
|
model_replacement: '$2'
|
|
3895
|
-
- regex: ';
|
|
4086
|
+
- regex: '; {0,2}(Q\-?[Mm]obile)[ _\-](S[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3896
4087
|
device_replacement: '$1 $2'
|
|
3897
4088
|
brand_replacement: 'Qmobilevn'
|
|
3898
4089
|
model_replacement: '$2'
|
|
@@ -3901,7 +4092,7 @@ device_parsers:
|
|
|
3901
4092
|
# Quanta
|
|
3902
4093
|
# @ref: ?
|
|
3903
4094
|
#########
|
|
3904
|
-
- regex: ';
|
|
4095
|
+
- regex: '; {0,2}(TA1013)(?: Build|\) AppleWebKit)'
|
|
3905
4096
|
device_replacement: '$1'
|
|
3906
4097
|
brand_replacement: 'Quanta'
|
|
3907
4098
|
model_replacement: '$1'
|
|
@@ -3924,7 +4115,7 @@ device_parsers:
|
|
|
3924
4115
|
# @ref: http://www.rock-chips.com/a/cn/product/index.html
|
|
3925
4116
|
# @note: manufacturer sells chipsets - I assume that these UAs are dev-boards
|
|
3926
4117
|
#########
|
|
3927
|
-
- regex: ';
|
|
4118
|
+
- regex: '; {0,2}(RK\d+),?(?: Build|\) AppleWebKit)'
|
|
3928
4119
|
device_replacement: '$1'
|
|
3929
4120
|
brand_replacement: 'Rockchip'
|
|
3930
4121
|
model_replacement: '$1'
|
|
@@ -3937,55 +4128,55 @@ device_parsers:
|
|
|
3937
4128
|
# Samsung Android Devices
|
|
3938
4129
|
# @ref: http://www.samsung.com/us/mobile/cell-phones/all-products
|
|
3939
4130
|
#########
|
|
3940
|
-
- regex: ';
|
|
4131
|
+
- 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/'
|
|
3941
4132
|
device_replacement: 'Samsung $1$2'
|
|
3942
4133
|
brand_replacement: 'Samsung'
|
|
3943
4134
|
model_replacement: '$2'
|
|
3944
|
-
- regex: ';
|
|
4135
|
+
- regex: '; {0,2}(Google |)(Nexus [Ss](?: 4G|)) Build/'
|
|
3945
4136
|
device_replacement: 'Samsung $1$2'
|
|
3946
4137
|
brand_replacement: 'Samsung'
|
|
3947
4138
|
model_replacement: '$2'
|
|
3948
|
-
- regex: ';
|
|
4139
|
+
- regex: '; {0,2}(SAMSUNG |Samsung )([^\/]{0,50})\/[^ ]{0,50} Build/'
|
|
3949
4140
|
device_replacement: 'Samsung $2'
|
|
3950
4141
|
brand_replacement: 'Samsung'
|
|
3951
4142
|
model_replacement: '$2'
|
|
3952
|
-
- regex: ';
|
|
4143
|
+
- regex: '; {0,2}(Galaxy(?: Ace| Nexus| S ?II+|Nexus S| with MCR 1.2| Mini Plus 4G|)) Build/'
|
|
3953
4144
|
device_replacement: 'Samsung $1'
|
|
3954
4145
|
brand_replacement: 'Samsung'
|
|
3955
4146
|
model_replacement: '$1'
|
|
3956
|
-
- regex: ';
|
|
4147
|
+
- regex: '; {0,2}(SAMSUNG[ _\-]|)(?:SAMSUNG[ _\-])([^;/]{1,100}) Build'
|
|
3957
4148
|
device_replacement: 'Samsung $2'
|
|
3958
4149
|
brand_replacement: 'Samsung'
|
|
3959
4150
|
model_replacement: '$2'
|
|
3960
|
-
- regex: ';
|
|
4151
|
+
- regex: '; {0,2}(SAMSUNG-|)(GT\-[BINPS]\d{4}[^\/]{0,50})(\/[^ ]{0,50}) Build'
|
|
3961
4152
|
device_replacement: 'Samsung $1$2$3'
|
|
3962
4153
|
brand_replacement: 'Samsung'
|
|
3963
4154
|
model_replacement: '$2'
|
|
3964
|
-
- regex: '(?:;
|
|
4155
|
+
- regex: '(?:; {0,2}|^)((?:GT\-[BIiNPS]\d{4}|I9\d{2}0[A-Za-z\+]?\b)[^;/\)]*?)(?:Build|Linux|MIUI|[;/\)])'
|
|
3965
4156
|
device_replacement: 'Samsung $1'
|
|
3966
4157
|
brand_replacement: 'Samsung'
|
|
3967
4158
|
model_replacement: '$1'
|
|
3968
|
-
- regex: '; (SAMSUNG-)([A-Za-z0-9\-]
|
|
4159
|
+
- regex: '; (SAMSUNG-)([A-Za-z0-9\-]{0,50}).{0,200} Build/'
|
|
3969
4160
|
device_replacement: 'Samsung $1$2'
|
|
3970
4161
|
brand_replacement: 'Samsung'
|
|
3971
4162
|
model_replacement: '$2'
|
|
3972
|
-
- regex: ';
|
|
4163
|
+
- regex: '; {0,2}((?:SCH|SGH|SHV|SHW|SPH|SC|SM)\-[A-Za-z0-9 ]{1,50})(/?[^ ]*|) Build'
|
|
3973
4164
|
device_replacement: 'Samsung $1'
|
|
3974
4165
|
brand_replacement: 'Samsung'
|
|
3975
4166
|
model_replacement: '$1'
|
|
3976
|
-
- regex: ';
|
|
4167
|
+
- regex: '; {0,2}((?:SC)\-[A-Za-z0-9 ]{1,50})(/?[^ ]*|)\)'
|
|
3977
4168
|
device_replacement: 'Samsung $1'
|
|
3978
4169
|
brand_replacement: 'Samsung'
|
|
3979
4170
|
model_replacement: '$1'
|
|
3980
|
-
- regex: ' ((?:SCH)\-[A-Za-z0-9 ]
|
|
4171
|
+
- regex: ' ((?:SCH)\-[A-Za-z0-9 ]{1,50})(/?[^ ]*|) Build'
|
|
3981
4172
|
device_replacement: 'Samsung $1'
|
|
3982
4173
|
brand_replacement: 'Samsung'
|
|
3983
4174
|
model_replacement: '$1'
|
|
3984
|
-
- regex: ';
|
|
4175
|
+
- regex: '; {0,2}(Behold ?(?:2|II)|YP\-G[^;/]{1,100}|EK-GC100|SCL21|I9300) Build'
|
|
3985
4176
|
device_replacement: 'Samsung $1'
|
|
3986
4177
|
brand_replacement: 'Samsung'
|
|
3987
4178
|
model_replacement: '$1'
|
|
3988
|
-
- regex: ';
|
|
4179
|
+
- regex: '; {0,2}((?:SCH|SGH|SHV|SHW|SPH|SC|SM)\-[A-Za-z0-9]{5,6})[\)]'
|
|
3989
4180
|
device_replacement: 'Samsung $1'
|
|
3990
4181
|
brand_replacement: 'Samsung'
|
|
3991
4182
|
model_replacement: '$1'
|
|
@@ -3995,11 +4186,11 @@ device_parsers:
|
|
|
3995
4186
|
# @ref: http://www.sharp-phone.com/en/index.html
|
|
3996
4187
|
# @ref: http://www.android.com/devices/?country=all&m=sharp
|
|
3997
4188
|
#########
|
|
3998
|
-
- regex: ';
|
|
4189
|
+
- regex: '; {0,2}(SH\-?\d\d[^;/]{1,100}|SBM\d[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
3999
4190
|
device_replacement: '$1'
|
|
4000
4191
|
brand_replacement: 'Sharp'
|
|
4001
4192
|
model_replacement: '$1'
|
|
4002
|
-
- regex: ';
|
|
4193
|
+
- regex: '; {0,2}(SHARP[ -])([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4003
4194
|
device_replacement: '$1$2'
|
|
4004
4195
|
brand_replacement: 'Sharp'
|
|
4005
4196
|
model_replacement: '$2'
|
|
@@ -4008,15 +4199,15 @@ device_parsers:
|
|
|
4008
4199
|
# Simvalley
|
|
4009
4200
|
# @ref: http://www.simvalley-mobile.de/
|
|
4010
4201
|
#########
|
|
4011
|
-
- regex: ';
|
|
4202
|
+
- regex: '; {0,2}(SPX[_\-]\d[^;/]*)(?: Build|\) AppleWebKit)'
|
|
4012
4203
|
device_replacement: '$1'
|
|
4013
4204
|
brand_replacement: 'Simvalley'
|
|
4014
4205
|
model_replacement: '$1'
|
|
4015
|
-
- regex: ';
|
|
4206
|
+
- regex: '; {0,2}(SX7\-PEARL\.GmbH)(?: Build|\) AppleWebKit)'
|
|
4016
4207
|
device_replacement: '$1'
|
|
4017
4208
|
brand_replacement: 'Simvalley'
|
|
4018
4209
|
model_replacement: '$1'
|
|
4019
|
-
- regex: ';
|
|
4210
|
+
- regex: '; {0,2}(SP[T]?\-\d{2}[^;/]*)(?: Build|\) AppleWebKit)'
|
|
4020
4211
|
device_replacement: '$1'
|
|
4021
4212
|
brand_replacement: 'Simvalley'
|
|
4022
4213
|
model_replacement: '$1'
|
|
@@ -4026,7 +4217,7 @@ device_parsers:
|
|
|
4026
4217
|
# @ref: http://www.sk-w.com/phone/phone_list.jsp
|
|
4027
4218
|
# @ref: http://www.android.com/devices/?country=all&m=sk-telesys
|
|
4028
4219
|
#########
|
|
4029
|
-
- regex: ';
|
|
4220
|
+
- regex: '; {0,2}(SK\-.{0,200}?)(?: Build|\) AppleWebKit)'
|
|
4030
4221
|
device_replacement: '$1'
|
|
4031
4222
|
brand_replacement: 'SKtelesys'
|
|
4032
4223
|
model_replacement: '$1'
|
|
@@ -4035,11 +4226,11 @@ device_parsers:
|
|
|
4035
4226
|
# Skytex
|
|
4036
4227
|
# @ref: http://skytex.com/android
|
|
4037
4228
|
#########
|
|
4038
|
-
- regex: ';
|
|
4229
|
+
- regex: '; {0,2}(?:SKYTEX|SX)-([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4039
4230
|
device_replacement: '$1'
|
|
4040
4231
|
brand_replacement: 'Skytex'
|
|
4041
4232
|
model_replacement: '$1'
|
|
4042
|
-
- regex: ';
|
|
4233
|
+
- regex: '; {0,2}(IMAGINE [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4043
4234
|
device_replacement: '$1'
|
|
4044
4235
|
brand_replacement: 'Skytex'
|
|
4045
4236
|
model_replacement: '$1'
|
|
@@ -4049,7 +4240,7 @@ device_parsers:
|
|
|
4049
4240
|
# @ref: http://en.smartdevices.com.cn/Products/
|
|
4050
4241
|
# @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
|
|
4051
4242
|
#########
|
|
4052
|
-
- regex: ';
|
|
4243
|
+
- regex: '; {0,2}(SmartQ) ?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4053
4244
|
device_replacement: '$1 $2'
|
|
4054
4245
|
brand_replacement: '$1'
|
|
4055
4246
|
model_replacement: '$2'
|
|
@@ -4059,7 +4250,7 @@ device_parsers:
|
|
|
4059
4250
|
# @ref: http://www.smartbitt.com/
|
|
4060
4251
|
# @missing: SBT Useragents
|
|
4061
4252
|
#########
|
|
4062
|
-
- regex: ';
|
|
4253
|
+
- regex: '; {0,2}(WF7C|WF10C|SBT[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4063
4254
|
device_replacement: '$1'
|
|
4064
4255
|
brand_replacement: 'Smartbitt'
|
|
4065
4256
|
model_replacement: '$1'
|
|
@@ -4068,15 +4259,15 @@ device_parsers:
|
|
|
4068
4259
|
# Softbank (Operator Branded Devices)
|
|
4069
4260
|
# @ref: http://www.ipentec.com/document/document.aspx?page=android-useragent
|
|
4070
4261
|
#########
|
|
4071
|
-
- regex: ';
|
|
4262
|
+
- regex: '; {0,2}(SBM(?:003SH|005SH|006SH|007SH|102SH)) Build'
|
|
4072
4263
|
device_replacement: '$1'
|
|
4073
4264
|
brand_replacement: 'Sharp'
|
|
4074
4265
|
model_replacement: '$1'
|
|
4075
|
-
- regex: ';
|
|
4266
|
+
- regex: '; {0,2}(003P|101P|101P11C|102P) Build'
|
|
4076
4267
|
device_replacement: '$1'
|
|
4077
4268
|
brand_replacement: 'Panasonic'
|
|
4078
4269
|
model_replacement: '$1'
|
|
4079
|
-
- regex: ';
|
|
4270
|
+
- regex: '; {0,2}(00\dZ) Build/'
|
|
4080
4271
|
device_replacement: '$1'
|
|
4081
4272
|
brand_replacement: 'ZTE'
|
|
4082
4273
|
model_replacement: '$1'
|
|
@@ -4084,11 +4275,11 @@ device_parsers:
|
|
|
4084
4275
|
device_replacement: '$1'
|
|
4085
4276
|
brand_replacement: 'HTC'
|
|
4086
4277
|
model_replacement: '$1'
|
|
4087
|
-
- regex: ';
|
|
4278
|
+
- regex: '; {0,2}(001HT|X06HT) Build'
|
|
4088
4279
|
device_replacement: '$1'
|
|
4089
4280
|
brand_replacement: 'HTC'
|
|
4090
4281
|
model_replacement: '$1'
|
|
4091
|
-
- regex: ';
|
|
4282
|
+
- regex: '; {0,2}(201M) Build'
|
|
4092
4283
|
device_replacement: '$1'
|
|
4093
4284
|
brand_replacement: 'Motorola'
|
|
4094
4285
|
model_replacement: 'XT902'
|
|
@@ -4098,11 +4289,11 @@ device_parsers:
|
|
|
4098
4289
|
# @ref: http://www.trekstor.co.uk/surftabs-en.html
|
|
4099
4290
|
# @note: Must come before SonyEricsson
|
|
4100
4291
|
#########
|
|
4101
|
-
- regex: ';
|
|
4292
|
+
- regex: '; {0,2}(ST\d{4}.{0,200})Build/ST'
|
|
4102
4293
|
device_replacement: 'Trekstor $1'
|
|
4103
4294
|
brand_replacement: 'Trekstor'
|
|
4104
4295
|
model_replacement: '$1'
|
|
4105
|
-
- regex: ';
|
|
4296
|
+
- regex: '; {0,2}(ST\d{4}.{0,200}?)(?: Build|\) AppleWebKit)'
|
|
4106
4297
|
device_replacement: 'Trekstor $1'
|
|
4107
4298
|
brand_replacement: 'Trekstor'
|
|
4108
4299
|
model_replacement: '$1'
|
|
@@ -4114,16 +4305,16 @@ device_parsers:
|
|
|
4114
4305
|
# @TODO: type!
|
|
4115
4306
|
#########
|
|
4116
4307
|
# android matchers
|
|
4117
|
-
- regex: ';
|
|
4308
|
+
- regex: '; {0,2}(Sony ?Ericsson ?)([^;/]{1,100}) Build'
|
|
4118
4309
|
device_replacement: '$1$2'
|
|
4119
4310
|
brand_replacement: 'SonyEricsson'
|
|
4120
4311
|
model_replacement: '$2'
|
|
4121
|
-
- regex: ';
|
|
4312
|
+
- regex: '; {0,2}((?:SK|ST|E|X|LT|MK|MT|WT)\d{2}[a-z0-9]*(?:-o|)|R800i|U20i) Build'
|
|
4122
4313
|
device_replacement: '$1'
|
|
4123
4314
|
brand_replacement: 'SonyEricsson'
|
|
4124
4315
|
model_replacement: '$1'
|
|
4125
4316
|
# TODO X\d+ is wrong
|
|
4126
|
-
- regex: ';
|
|
4317
|
+
- regex: '; {0,2}(Xperia (?:A8|Arc|Acro|Active|Live with Walkman|Mini|Neo|Play|Pro|Ray|X\d+)[^;/]{0,50}) Build'
|
|
4127
4318
|
regex_flag: 'i'
|
|
4128
4319
|
device_replacement: '$1'
|
|
4129
4320
|
brand_replacement: 'SonyEricsson'
|
|
@@ -4135,31 +4326,31 @@ device_parsers:
|
|
|
4135
4326
|
# @ref: http://www.sonymobile.com/global-en/products/phones/
|
|
4136
4327
|
# @ref: http://www.sony.jp/tablet/
|
|
4137
4328
|
#########
|
|
4138
|
-
- regex: '; Sony (Tablet[^;/]
|
|
4329
|
+
- regex: '; Sony (Tablet[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4139
4330
|
device_replacement: 'Sony $1'
|
|
4140
4331
|
brand_replacement: 'Sony'
|
|
4141
4332
|
model_replacement: '$1'
|
|
4142
|
-
- regex: '; Sony ([^;/]
|
|
4333
|
+
- regex: '; Sony ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4143
4334
|
device_replacement: 'Sony $1'
|
|
4144
4335
|
brand_replacement: 'Sony'
|
|
4145
4336
|
model_replacement: '$1'
|
|
4146
|
-
- regex: ';
|
|
4337
|
+
- regex: '; {0,2}(Sony)([A-Za-z0-9\-]+)(?: Build|\) AppleWebKit)'
|
|
4147
4338
|
device_replacement: '$1 $2'
|
|
4148
4339
|
brand_replacement: '$1'
|
|
4149
4340
|
model_replacement: '$2'
|
|
4150
|
-
- regex: ';
|
|
4341
|
+
- regex: '; {0,2}(Xperia [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4151
4342
|
device_replacement: '$1'
|
|
4152
4343
|
brand_replacement: 'Sony'
|
|
4153
4344
|
model_replacement: '$1'
|
|
4154
|
-
- regex: ';
|
|
4345
|
+
- 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)'
|
|
4155
4346
|
device_replacement: '$1'
|
|
4156
4347
|
brand_replacement: 'Sony'
|
|
4157
4348
|
model_replacement: '$1'
|
|
4158
|
-
- regex: ';
|
|
4349
|
+
- regex: '; {0,2}(SGP\d{3}|SGPT\d{2})(?: Build|\) AppleWebKit)'
|
|
4159
4350
|
device_replacement: '$1'
|
|
4160
4351
|
brand_replacement: 'Sony'
|
|
4161
4352
|
model_replacement: '$1'
|
|
4162
|
-
- regex: ';
|
|
4353
|
+
- regex: '; {0,2}(NW-Z1000Series)(?: Build|\) AppleWebKit)'
|
|
4163
4354
|
device_replacement: '$1'
|
|
4164
4355
|
brand_replacement: 'Sony'
|
|
4165
4356
|
model_replacement: '$1'
|
|
@@ -4182,7 +4373,7 @@ device_parsers:
|
|
|
4182
4373
|
# Spice
|
|
4183
4374
|
# @ref: http://www.spicemobilephones.co.in/
|
|
4184
4375
|
#########
|
|
4185
|
-
- regex: ';
|
|
4376
|
+
- regex: '; {0,2}((?:CSL_Spice|Spice|SPICE|CSL)[ _\-]?|)([Mm][Ii])([ _\-]|)(\d{3}[^;/]*)(?: Build|\) AppleWebKit)'
|
|
4186
4377
|
device_replacement: '$1$2$3$4'
|
|
4187
4378
|
brand_replacement: 'Spice'
|
|
4188
4379
|
model_replacement: 'Mi$4'
|
|
@@ -4191,7 +4382,7 @@ device_parsers:
|
|
|
4191
4382
|
# Sprint (Operator Branded Devices)
|
|
4192
4383
|
# @ref:
|
|
4193
4384
|
#########
|
|
4194
|
-
- regex: ';
|
|
4385
|
+
- regex: '; {0,2}(Sprint )(.{1,200}?) {0,2}(?:Build|[;/])'
|
|
4195
4386
|
device_replacement: '$1$2'
|
|
4196
4387
|
brand_replacement: 'Sprint'
|
|
4197
4388
|
model_replacement: '$2'
|
|
@@ -4204,7 +4395,7 @@ device_parsers:
|
|
|
4204
4395
|
# Tagi
|
|
4205
4396
|
# @ref: ??
|
|
4206
4397
|
#########
|
|
4207
|
-
- regex: ';
|
|
4398
|
+
- regex: '; {0,2}(TAGI[ ]?)(MID) ?([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4208
4399
|
device_replacement: '$1$2$3'
|
|
4209
4400
|
brand_replacement: 'Tagi'
|
|
4210
4401
|
model_replacement: '$2$3'
|
|
@@ -4213,7 +4404,7 @@ device_parsers:
|
|
|
4213
4404
|
# Tecmobile
|
|
4214
4405
|
# @ref: http://www.tecmobile.com/
|
|
4215
4406
|
#########
|
|
4216
|
-
- regex: ';
|
|
4407
|
+
- regex: '; {0,2}(Oyster500|Opal 800)(?: Build|\) AppleWebKit)'
|
|
4217
4408
|
device_replacement: 'Tecmobile $1'
|
|
4218
4409
|
brand_replacement: 'Tecmobile'
|
|
4219
4410
|
model_replacement: '$1'
|
|
@@ -4222,7 +4413,7 @@ device_parsers:
|
|
|
4222
4413
|
# Tecno
|
|
4223
4414
|
# @ref: www.tecno-mobile.com/
|
|
4224
4415
|
#########
|
|
4225
|
-
- regex: ';
|
|
4416
|
+
- regex: '; {0,2}(TECNO[ _])([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4226
4417
|
device_replacement: '$1$2'
|
|
4227
4418
|
brand_replacement: 'Tecno'
|
|
4228
4419
|
model_replacement: '$2'
|
|
@@ -4231,7 +4422,7 @@ device_parsers:
|
|
|
4231
4422
|
# Telechips, Techvision evaluation boards
|
|
4232
4423
|
# @ref:
|
|
4233
4424
|
#########
|
|
4234
|
-
- regex: ';
|
|
4425
|
+
- regex: '; {0,2}Android for (Telechips|Techvision) ([^ ]+) '
|
|
4235
4426
|
regex_flag: 'i'
|
|
4236
4427
|
device_replacement: '$1 $2'
|
|
4237
4428
|
brand_replacement: '$1'
|
|
@@ -4242,7 +4433,7 @@ device_parsers:
|
|
|
4242
4433
|
# @ref: http://www.telstra.com.au/home-phone/thub-2/
|
|
4243
4434
|
# @ref: https://support.google.com/googleplay/answer/1727131?hl=en
|
|
4244
4435
|
#########
|
|
4245
|
-
- regex: ';
|
|
4436
|
+
- regex: '; {0,2}(T-Hub2)(?: Build|\) AppleWebKit)'
|
|
4246
4437
|
device_replacement: '$1'
|
|
4247
4438
|
brand_replacement: 'Telstra'
|
|
4248
4439
|
model_replacement: '$1'
|
|
@@ -4251,7 +4442,7 @@ device_parsers:
|
|
|
4251
4442
|
# Terra
|
|
4252
4443
|
# @ref: http://www.wortmann.de/
|
|
4253
4444
|
#########
|
|
4254
|
-
- regex: ';
|
|
4445
|
+
- regex: '; {0,2}(PAD) ?(100[12])(?: Build|\) AppleWebKit)'
|
|
4255
4446
|
device_replacement: 'Terra $1$2'
|
|
4256
4447
|
brand_replacement: 'Terra'
|
|
4257
4448
|
model_replacement: '$1$2'
|
|
@@ -4260,7 +4451,7 @@ device_parsers:
|
|
|
4260
4451
|
# Texet
|
|
4261
4452
|
# @ref: http://www.texet.ru/tablet/
|
|
4262
4453
|
#########
|
|
4263
|
-
- regex: ';
|
|
4454
|
+
- regex: '; {0,2}(T[BM]-\d{3}[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4264
4455
|
device_replacement: '$1'
|
|
4265
4456
|
brand_replacement: 'Texet'
|
|
4266
4457
|
model_replacement: '$1'
|
|
@@ -4269,11 +4460,11 @@ device_parsers:
|
|
|
4269
4460
|
# Thalia
|
|
4270
4461
|
# @ref: http://www.thalia.de/shop/tolino-shine-ereader/show/
|
|
4271
4462
|
#########
|
|
4272
|
-
- regex: ';
|
|
4463
|
+
- regex: '; {0,2}(tolino [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4273
4464
|
device_replacement: '$1'
|
|
4274
4465
|
brand_replacement: 'Thalia'
|
|
4275
4466
|
model_replacement: '$1'
|
|
4276
|
-
- regex: ';
|
|
4467
|
+
- regex: '; {0,2}Build/.{0,200} (TOLINO_BROWSER)'
|
|
4277
4468
|
device_replacement: '$1'
|
|
4278
4469
|
brand_replacement: 'Thalia'
|
|
4279
4470
|
model_replacement: 'Tolino Shine'
|
|
@@ -4283,11 +4474,11 @@ device_parsers:
|
|
|
4283
4474
|
# @ref: http://en.thl.com.cn/Mobile
|
|
4284
4475
|
# @ref: http://thlmobilestore.com
|
|
4285
4476
|
#########
|
|
4286
|
-
- regex: ';
|
|
4477
|
+
- regex: '; {0,2}(?:CJ[ -])?(ThL|THL)[ -]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4287
4478
|
device_replacement: '$1 $2'
|
|
4288
4479
|
brand_replacement: 'Thl'
|
|
4289
4480
|
model_replacement: '$2'
|
|
4290
|
-
- regex: ';
|
|
4481
|
+
- regex: '; {0,2}(T100|T200|T5|W100|W200|W8s)(?: Build|\) AppleWebKit)'
|
|
4291
4482
|
device_replacement: '$1'
|
|
4292
4483
|
brand_replacement: 'Thl'
|
|
4293
4484
|
model_replacement: '$1'
|
|
@@ -4296,28 +4487,28 @@ device_parsers:
|
|
|
4296
4487
|
# T-Mobile (Operator Branded Devices)
|
|
4297
4488
|
#########
|
|
4298
4489
|
# @ref: https://en.wikipedia.org/wiki/HTC_Hero
|
|
4299
|
-
- regex: ';
|
|
4490
|
+
- regex: '; {0,2}(T-Mobile[ _]G2[ _]Touch) Build'
|
|
4300
4491
|
device_replacement: '$1'
|
|
4301
4492
|
brand_replacement: 'HTC'
|
|
4302
4493
|
model_replacement: 'Hero'
|
|
4303
4494
|
# @ref: https://en.wikipedia.org/wiki/HTC_Desire_Z
|
|
4304
|
-
- regex: ';
|
|
4495
|
+
- regex: '; {0,2}(T-Mobile[ _]G2) Build'
|
|
4305
4496
|
device_replacement: '$1'
|
|
4306
4497
|
brand_replacement: 'HTC'
|
|
4307
4498
|
model_replacement: 'Desire Z'
|
|
4308
|
-
- regex: ';
|
|
4499
|
+
- regex: '; {0,2}(T-Mobile myTouch Q) Build'
|
|
4309
4500
|
device_replacement: '$1'
|
|
4310
4501
|
brand_replacement: 'Huawei'
|
|
4311
4502
|
model_replacement: 'U8730'
|
|
4312
|
-
- regex: ';
|
|
4503
|
+
- regex: '; {0,2}(T-Mobile myTouch) Build'
|
|
4313
4504
|
device_replacement: '$1'
|
|
4314
4505
|
brand_replacement: 'Huawei'
|
|
4315
4506
|
model_replacement: 'U8680'
|
|
4316
|
-
- regex: ';
|
|
4507
|
+
- regex: '; {0,2}(T-Mobile_Espresso) Build'
|
|
4317
4508
|
device_replacement: '$1'
|
|
4318
4509
|
brand_replacement: 'HTC'
|
|
4319
4510
|
model_replacement: 'Espresso'
|
|
4320
|
-
- regex: ';
|
|
4511
|
+
- regex: '; {0,2}(T-Mobile G1) Build'
|
|
4321
4512
|
device_replacement: '$1'
|
|
4322
4513
|
brand_replacement: 'HTC'
|
|
4323
4514
|
model_replacement: 'Dream'
|
|
@@ -4325,11 +4516,11 @@ device_parsers:
|
|
|
4325
4516
|
device_replacement: '$1$2 $3 $4'
|
|
4326
4517
|
brand_replacement: 'HTC'
|
|
4327
4518
|
model_replacement: '$2 $3 $4'
|
|
4328
|
-
- regex: '\b(T-Mobile)_([^_]+)_(
|
|
4519
|
+
- regex: '\b(T-Mobile)_([^_]+)_(.{0,200}) Build'
|
|
4329
4520
|
device_replacement: '$1 $2 $3'
|
|
4330
4521
|
brand_replacement: 'Tmobile'
|
|
4331
4522
|
model_replacement: '$2 $3'
|
|
4332
|
-
- regex: '\b(T-Mobile)[_ ]?(
|
|
4523
|
+
- regex: '\b(T-Mobile)[_ ]?(.{0,200}?)Build'
|
|
4333
4524
|
device_replacement: '$1 $2'
|
|
4334
4525
|
brand_replacement: 'Tmobile'
|
|
4335
4526
|
model_replacement: '$2'
|
|
@@ -4347,7 +4538,7 @@ device_parsers:
|
|
|
4347
4538
|
# Tooky
|
|
4348
4539
|
# @ref: http://www.tookymobile.com/
|
|
4349
4540
|
#########
|
|
4350
|
-
- regex: '
|
|
4541
|
+
- regex: ' ?(TOOKY)[ _\-]([^;/]{1,100}) ?(?:Build|;)'
|
|
4351
4542
|
regex_flag: 'i'
|
|
4352
4543
|
device_replacement: '$1 $2'
|
|
4353
4544
|
brand_replacement: 'Tooky'
|
|
@@ -4362,11 +4553,11 @@ device_parsers:
|
|
|
4362
4553
|
device_replacement: '$1'
|
|
4363
4554
|
brand_replacement: 'Toshiba'
|
|
4364
4555
|
model_replacement: 'Folio 100'
|
|
4365
|
-
- regex: ';
|
|
4556
|
+
- regex: '; {0,2}([Ff]olio ?100)(?: Build|\) AppleWebKit)'
|
|
4366
4557
|
device_replacement: '$1'
|
|
4367
4558
|
brand_replacement: 'Toshiba'
|
|
4368
4559
|
model_replacement: 'Folio 100'
|
|
4369
|
-
- regex: ';
|
|
4560
|
+
- 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)'
|
|
4370
4561
|
device_replacement: 'Toshiba $1'
|
|
4371
4562
|
brand_replacement: 'Toshiba'
|
|
4372
4563
|
model_replacement: '$1'
|
|
@@ -4375,12 +4566,12 @@ device_parsers:
|
|
|
4375
4566
|
# Touchmate
|
|
4376
4567
|
# @ref: http://touchmatepc.com/new/
|
|
4377
4568
|
#########
|
|
4378
|
-
- regex: ';
|
|
4569
|
+
- regex: '; {0,2}(TM-MID\d+[^;/]{1,50}|TOUCHMATE|MID-750)(?: Build|\) AppleWebKit)'
|
|
4379
4570
|
device_replacement: '$1'
|
|
4380
4571
|
brand_replacement: 'Touchmate'
|
|
4381
4572
|
model_replacement: '$1'
|
|
4382
4573
|
# @todo: needs verification user-agents missing
|
|
4383
|
-
- regex: ';
|
|
4574
|
+
- regex: '; {0,2}(TM-SM\d+[^;/]{1,50}?)(?: Build|\) AppleWebKit)'
|
|
4384
4575
|
device_replacement: '$1'
|
|
4385
4576
|
brand_replacement: 'Touchmate'
|
|
4386
4577
|
model_replacement: '$1'
|
|
@@ -4389,11 +4580,11 @@ device_parsers:
|
|
|
4389
4580
|
# Treq
|
|
4390
4581
|
# @ref: http://www.treq.co.id/product
|
|
4391
4582
|
#########
|
|
4392
|
-
- regex: ';
|
|
4583
|
+
- regex: '; {0,2}(A10 [Bb]asic2?)(?: Build|\) AppleWebKit)'
|
|
4393
4584
|
device_replacement: '$1'
|
|
4394
4585
|
brand_replacement: 'Treq'
|
|
4395
4586
|
model_replacement: '$1'
|
|
4396
|
-
- regex: ';
|
|
4587
|
+
- regex: '; {0,2}(TREQ[ _\-])([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4397
4588
|
regex_flag: 'i'
|
|
4398
4589
|
device_replacement: '$1$2'
|
|
4399
4590
|
brand_replacement: 'Treq'
|
|
@@ -4405,21 +4596,40 @@ device_parsers:
|
|
|
4405
4596
|
# @models: A936|A603|X-5|X-3
|
|
4406
4597
|
#########
|
|
4407
4598
|
# @todo: guessed markers
|
|
4408
|
-
- regex: ';
|
|
4599
|
+
- regex: '; {0,2}(X-?5|X-?3)(?: Build|\) AppleWebKit)'
|
|
4409
4600
|
device_replacement: '$1'
|
|
4410
4601
|
brand_replacement: 'Umeox'
|
|
4411
4602
|
model_replacement: '$1'
|
|
4412
4603
|
# @todo: guessed markers
|
|
4413
|
-
- regex: ';
|
|
4604
|
+
- regex: '; {0,2}(A502\+?|A936|A603|X1|X2)(?: Build|\) AppleWebKit)'
|
|
4414
4605
|
device_replacement: '$1'
|
|
4415
4606
|
brand_replacement: 'Umeox'
|
|
4416
4607
|
model_replacement: '$1'
|
|
4417
4608
|
|
|
4609
|
+
#########
|
|
4610
|
+
# Vernee
|
|
4611
|
+
# @ref: http://vernee.cc/
|
|
4612
|
+
# @models: Thor - Thor E
|
|
4613
|
+
#########
|
|
4614
|
+
- regex: '; thor Build/'
|
|
4615
|
+
device_replacement: 'Thor'
|
|
4616
|
+
brand_replacement: 'Vernee'
|
|
4617
|
+
model_replacement: 'Thor'
|
|
4618
|
+
# Regex to modidy for Thor Plus (don't find example UA)
|
|
4619
|
+
- regex: '; Thor (E)? Build/'
|
|
4620
|
+
device_replacement: 'Thor $1'
|
|
4621
|
+
brand_replacement: 'Vernee'
|
|
4622
|
+
model_replacement: 'Thor'
|
|
4623
|
+
- regex: '; Apollo Lite Build/'
|
|
4624
|
+
device_replacement: 'Apollo Lite'
|
|
4625
|
+
brand_replacement: 'Vernee'
|
|
4626
|
+
model_replacement: 'Apollo'
|
|
4627
|
+
|
|
4418
4628
|
#########
|
|
4419
4629
|
# Versus
|
|
4420
4630
|
# @ref: http://versusuk.com/support.html
|
|
4421
4631
|
#########
|
|
4422
|
-
- regex: '(TOUCH(?:TAB|PAD)
|
|
4632
|
+
- regex: '(TOUCH(?:TAB|PAD).{1,200}?)(?: Build|\) AppleWebKit)'
|
|
4423
4633
|
regex_flag: 'i'
|
|
4424
4634
|
device_replacement: 'Versus $1'
|
|
4425
4635
|
brand_replacement: 'Versus'
|
|
@@ -4429,7 +4639,7 @@ device_parsers:
|
|
|
4429
4639
|
# Vertu
|
|
4430
4640
|
# @ref: http://www.vertu.com/
|
|
4431
4641
|
#########
|
|
4432
|
-
- regex: '(VERTU) ([^;/]
|
|
4642
|
+
- regex: '(VERTU) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4433
4643
|
device_replacement: '$1 $2'
|
|
4434
4644
|
brand_replacement: 'Vertu'
|
|
4435
4645
|
model_replacement: '$2'
|
|
@@ -4438,7 +4648,7 @@ device_parsers:
|
|
|
4438
4648
|
# Videocon
|
|
4439
4649
|
# @ref: http://www.videoconmobiles.com
|
|
4440
4650
|
#########
|
|
4441
|
-
- regex: ';
|
|
4651
|
+
- regex: '; {0,2}(Videocon)[ _\-]([^;/]{1,100}?) {0,2}(?:Build|;)'
|
|
4442
4652
|
device_replacement: '$1 $2'
|
|
4443
4653
|
brand_replacement: 'Videocon'
|
|
4444
4654
|
model_replacement: '$2'
|
|
@@ -4451,15 +4661,15 @@ device_parsers:
|
|
|
4451
4661
|
# Viewsonic
|
|
4452
4662
|
# @ref: http://viewsonic.com
|
|
4453
4663
|
#########
|
|
4454
|
-
- regex: ';
|
|
4664
|
+
- regex: '; {0,2}((?:ViewPad|ViewPhone|VSD)[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4455
4665
|
device_replacement: '$1'
|
|
4456
4666
|
brand_replacement: 'Viewsonic'
|
|
4457
4667
|
model_replacement: '$1'
|
|
4458
|
-
- regex: ';
|
|
4668
|
+
- regex: '; {0,2}(ViewSonic-)([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4459
4669
|
device_replacement: '$1$2'
|
|
4460
4670
|
brand_replacement: 'Viewsonic'
|
|
4461
4671
|
model_replacement: '$2'
|
|
4462
|
-
- regex: ';
|
|
4672
|
+
- regex: '; {0,2}(GTablet.{0,200}?)(?: Build|\) AppleWebKit)'
|
|
4463
4673
|
device_replacement: '$1'
|
|
4464
4674
|
brand_replacement: 'Viewsonic'
|
|
4465
4675
|
model_replacement: '$1'
|
|
@@ -4468,7 +4678,7 @@ device_parsers:
|
|
|
4468
4678
|
# vivo
|
|
4469
4679
|
# @ref: http://vivo.cn/
|
|
4470
4680
|
#########
|
|
4471
|
-
- regex: ';
|
|
4681
|
+
- regex: '; {0,2}([Vv]ivo)[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4472
4682
|
device_replacement: '$1 $2'
|
|
4473
4683
|
brand_replacement: 'vivo'
|
|
4474
4684
|
model_replacement: '$2'
|
|
@@ -4477,7 +4687,7 @@ device_parsers:
|
|
|
4477
4687
|
# Vodafone (Operator Branded Devices)
|
|
4478
4688
|
# @ref: ??
|
|
4479
4689
|
#########
|
|
4480
|
-
- regex: '(Vodafone) (
|
|
4690
|
+
- regex: '(Vodafone) (.{0,200}?)(?: Build|\) AppleWebKit)'
|
|
4481
4691
|
device_replacement: '$1 $2'
|
|
4482
4692
|
brand_replacement: '$1'
|
|
4483
4693
|
model_replacement: '$2'
|
|
@@ -4486,7 +4696,7 @@ device_parsers:
|
|
|
4486
4696
|
# Walton
|
|
4487
4697
|
# @ref: http://www.waltonbd.com/
|
|
4488
4698
|
#########
|
|
4489
|
-
- regex: ';
|
|
4699
|
+
- regex: '; {0,2}(?:Walton[ _\-]|)(Primo[ _\-][^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4490
4700
|
regex_flag: 'i'
|
|
4491
4701
|
device_replacement: 'Walton $1'
|
|
4492
4702
|
brand_replacement: 'Walton'
|
|
@@ -4496,7 +4706,7 @@ device_parsers:
|
|
|
4496
4706
|
# Wiko
|
|
4497
4707
|
# @ref: http://fr.wikomobile.com/collection.php?s=Smartphones
|
|
4498
4708
|
#########
|
|
4499
|
-
- regex: ';
|
|
4709
|
+
- regex: '; {0,2}(?:WIKO[ \-]|)(CINK\+?|BARRY|BLOOM|DARKFULL|DARKMOON|DARKNIGHT|DARKSIDE|FIZZ|HIGHWAY|IGGY|OZZY|RAINBOW|STAIRWAY|SUBLIM|WAX|CINK [^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4500
4710
|
regex_flag: 'i'
|
|
4501
4711
|
device_replacement: 'Wiko $1'
|
|
4502
4712
|
brand_replacement: 'Wiko'
|
|
@@ -4506,7 +4716,7 @@ device_parsers:
|
|
|
4506
4716
|
# WellcoM
|
|
4507
4717
|
# @ref: ??
|
|
4508
4718
|
#########
|
|
4509
|
-
- regex: ';
|
|
4719
|
+
- regex: '; {0,2}WellcoM-([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4510
4720
|
device_replacement: 'Wellcom $1'
|
|
4511
4721
|
brand_replacement: 'Wellcom'
|
|
4512
4722
|
model_replacement: '$1'
|
|
@@ -4524,7 +4734,7 @@ device_parsers:
|
|
|
4524
4734
|
# Wolfgang
|
|
4525
4735
|
# @ref: http://wolfgangmobile.com/
|
|
4526
4736
|
#########
|
|
4527
|
-
- regex: ';
|
|
4737
|
+
- regex: '; {0,2}(AT-AS[^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4528
4738
|
device_replacement: 'Wolfgang $1'
|
|
4529
4739
|
brand_replacement: 'Wolfgang'
|
|
4530
4740
|
model_replacement: '$1'
|
|
@@ -4533,7 +4743,7 @@ device_parsers:
|
|
|
4533
4743
|
# Woxter
|
|
4534
4744
|
# @ref: http://www.woxter.es/es-es/categories/index
|
|
4535
4745
|
#########
|
|
4536
|
-
- regex: ';
|
|
4746
|
+
- regex: '; {0,2}(?:Woxter|Wxt) ([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4537
4747
|
device_replacement: 'Woxter $1'
|
|
4538
4748
|
brand_replacement: 'Woxter'
|
|
4539
4749
|
model_replacement: '$1'
|
|
@@ -4542,7 +4752,7 @@ device_parsers:
|
|
|
4542
4752
|
# Yarvik Zania
|
|
4543
4753
|
# @ref: http://yarvik.com
|
|
4544
4754
|
#########
|
|
4545
|
-
- regex: ';
|
|
4755
|
+
- 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)'
|
|
4546
4756
|
device_replacement: 'Yarvik $1'
|
|
4547
4757
|
brand_replacement: 'Yarvik'
|
|
4548
4758
|
model_replacement: '$1'
|
|
@@ -4556,7 +4766,7 @@ device_parsers:
|
|
|
4556
4766
|
# M778, M7000, M7000AD, M7000NBD, M7001, M7002, M7002KBD, M777, M767,
|
|
4557
4767
|
# M789, M799, M769, M757, M755, M753, M752, M739, M729, M723, M712, M727
|
|
4558
4768
|
#########
|
|
4559
|
-
- regex: ';
|
|
4769
|
+
- regex: '; {0,2}([A-Z]{2,4})(M\d{3,}[A-Z]{2})([^;\)\/]*)(?: Build|[;\)])'
|
|
4560
4770
|
device_replacement: 'Yifang $1$2$3'
|
|
4561
4771
|
brand_replacement: 'Yifang'
|
|
4562
4772
|
model_replacement: '$2'
|
|
@@ -4565,19 +4775,19 @@ device_parsers:
|
|
|
4565
4775
|
# XiaoMi
|
|
4566
4776
|
# @ref: http://www.xiaomi.com/event/buyphone
|
|
4567
4777
|
#########
|
|
4568
|
-
- regex: ';
|
|
4778
|
+
- regex: '; {0,2}((Mi|MI|HM|MI-ONE|Redmi)[ -](NOTE |Note |)[^;/]*) (Build|MIUI)/'
|
|
4569
4779
|
device_replacement: 'XiaoMi $1'
|
|
4570
4780
|
brand_replacement: 'XiaoMi'
|
|
4571
4781
|
model_replacement: '$1'
|
|
4572
|
-
- regex: ';
|
|
4782
|
+
- regex: '; {0,2}((Mi|MI|HM|MI-ONE|Redmi)[ -](NOTE |Note |)[^;/\)]*)'
|
|
4573
4783
|
device_replacement: 'XiaoMi $1'
|
|
4574
4784
|
brand_replacement: 'XiaoMi'
|
|
4575
4785
|
model_replacement: '$1'
|
|
4576
|
-
- regex: ';
|
|
4786
|
+
- regex: '; {0,2}(MIX) (Build|MIUI)/'
|
|
4577
4787
|
device_replacement: 'XiaoMi $1'
|
|
4578
4788
|
brand_replacement: 'XiaoMi'
|
|
4579
4789
|
model_replacement: '$1'
|
|
4580
|
-
- regex: ';
|
|
4790
|
+
- regex: '; {0,2}((MIX) ([^;/]*)) (Build|MIUI)/'
|
|
4581
4791
|
device_replacement: 'XiaoMi $1'
|
|
4582
4792
|
brand_replacement: 'XiaoMi'
|
|
4583
4793
|
model_replacement: '$1'
|
|
@@ -4586,17 +4796,17 @@ device_parsers:
|
|
|
4586
4796
|
# Xolo
|
|
4587
4797
|
# @ref: http://www.xolo.in/
|
|
4588
4798
|
#########
|
|
4589
|
-
- regex: ';
|
|
4799
|
+
- regex: '; {0,2}XOLO[ _]([^;/]{0,30}tab.{0,30})(?: Build|\) AppleWebKit)'
|
|
4590
4800
|
regex_flag: 'i'
|
|
4591
4801
|
device_replacement: 'Xolo $1'
|
|
4592
4802
|
brand_replacement: 'Xolo'
|
|
4593
4803
|
model_replacement: '$1'
|
|
4594
|
-
- regex: ';
|
|
4804
|
+
- regex: '; {0,2}XOLO[ _]([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4595
4805
|
regex_flag: 'i'
|
|
4596
4806
|
device_replacement: 'Xolo $1'
|
|
4597
4807
|
brand_replacement: 'Xolo'
|
|
4598
4808
|
model_replacement: '$1'
|
|
4599
|
-
- regex: ';
|
|
4809
|
+
- regex: '; {0,2}(q\d0{2,3}[a-z]?)(?: Build|\) AppleWebKit)'
|
|
4600
4810
|
regex_flag: 'i'
|
|
4601
4811
|
device_replacement: 'Xolo $1'
|
|
4602
4812
|
brand_replacement: 'Xolo'
|
|
@@ -4606,7 +4816,7 @@ device_parsers:
|
|
|
4606
4816
|
# Xoro
|
|
4607
4817
|
# @ref: http://www.xoro.de/produkte/
|
|
4608
4818
|
#########
|
|
4609
|
-
- regex: ';
|
|
4819
|
+
- regex: '; {0,2}(PAD ?[79]\d+[^;/]{0,50}|TelePAD\d+[^;/])(?: Build|\) AppleWebKit)'
|
|
4610
4820
|
device_replacement: 'Xoro $1'
|
|
4611
4821
|
brand_replacement: 'Xoro'
|
|
4612
4822
|
model_replacement: '$1'
|
|
@@ -4615,7 +4825,7 @@ device_parsers:
|
|
|
4615
4825
|
# Zopo
|
|
4616
4826
|
# @ref: http://www.zopomobiles.com/products.html
|
|
4617
4827
|
#########
|
|
4618
|
-
- regex: ';
|
|
4828
|
+
- regex: '; {0,2}(?:(?:ZOPO|Zopo)[ _]([^;/]{1,100}?)|(ZP ?(?:\d{2}[^;/]{1,100}|C2))|(C[2379]))(?: Build|\) AppleWebKit)'
|
|
4619
4829
|
device_replacement: '$1$2$3'
|
|
4620
4830
|
brand_replacement: 'Zopo'
|
|
4621
4831
|
model_replacement: '$1$2$3'
|
|
@@ -4624,11 +4834,11 @@ device_parsers:
|
|
|
4624
4834
|
# ZiiLabs
|
|
4625
4835
|
# @ref: http://www.ziilabs.com/products/platforms/androidreferencetablets.php
|
|
4626
4836
|
#########
|
|
4627
|
-
- regex: ';
|
|
4837
|
+
- regex: '; {0,2}(ZiiLABS) (Zii[^;/]*)(?: Build|\) AppleWebKit)'
|
|
4628
4838
|
device_replacement: '$1 $2'
|
|
4629
4839
|
brand_replacement: 'ZiiLabs'
|
|
4630
4840
|
model_replacement: '$2'
|
|
4631
|
-
- regex: ';
|
|
4841
|
+
- regex: '; {0,2}(Zii)_([^;/]*)(?: Build|\) AppleWebKit)'
|
|
4632
4842
|
device_replacement: '$1 $2'
|
|
4633
4843
|
brand_replacement: 'ZiiLabs'
|
|
4634
4844
|
model_replacement: '$2'
|
|
@@ -4637,36 +4847,36 @@ device_parsers:
|
|
|
4637
4847
|
# ZTE
|
|
4638
4848
|
# @ref: http://www.ztedevices.com/
|
|
4639
4849
|
#########
|
|
4640
|
-
- regex: ';
|
|
4850
|
+
- 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)'
|
|
4641
4851
|
device_replacement: '$1'
|
|
4642
4852
|
brand_replacement: 'ZTE'
|
|
4643
4853
|
model_replacement: '$1'
|
|
4644
|
-
- regex: ';
|
|
4854
|
+
- regex: '; {0,2}([A-Z]\d+)_USA_[^;]{0,200}(?: Build|\) AppleWebKit)'
|
|
4645
4855
|
device_replacement: '$1'
|
|
4646
4856
|
brand_replacement: 'ZTE'
|
|
4647
4857
|
model_replacement: '$1'
|
|
4648
|
-
- regex: ';
|
|
4858
|
+
- regex: '; {0,2}(SmartTab\d+)[^;]{0,50}(?: Build|\) AppleWebKit)'
|
|
4649
4859
|
device_replacement: '$1'
|
|
4650
4860
|
brand_replacement: 'ZTE'
|
|
4651
4861
|
model_replacement: '$1'
|
|
4652
|
-
- regex: ';
|
|
4862
|
+
- regex: '; {0,2}(?:Blade|BLADE|ZTE-BLADE)([^;/]*)(?: Build|\) AppleWebKit)'
|
|
4653
4863
|
device_replacement: 'ZTE Blade$1'
|
|
4654
4864
|
brand_replacement: 'ZTE'
|
|
4655
4865
|
model_replacement: 'Blade$1'
|
|
4656
|
-
- regex: ';
|
|
4866
|
+
- regex: '; {0,2}(?:Skate|SKATE|ZTE-SKATE)([^;/]*)(?: Build|\) AppleWebKit)'
|
|
4657
4867
|
device_replacement: 'ZTE Skate$1'
|
|
4658
4868
|
brand_replacement: 'ZTE'
|
|
4659
4869
|
model_replacement: 'Skate$1'
|
|
4660
|
-
- regex: ';
|
|
4870
|
+
- regex: '; {0,2}(Orange |Optimus )(Monte Carlo|San Francisco)(?: Build|\) AppleWebKit)'
|
|
4661
4871
|
device_replacement: '$1$2'
|
|
4662
4872
|
brand_replacement: 'ZTE'
|
|
4663
4873
|
model_replacement: '$1$2'
|
|
4664
|
-
- regex: ';
|
|
4874
|
+
- regex: '; {0,2}(?:ZXY-ZTE_|ZTE\-U |ZTE[\- _]|ZTE-C[_ ])([^;/]{1,100}?)(?: Build|\) AppleWebKit)'
|
|
4665
4875
|
device_replacement: 'ZTE $1'
|
|
4666
4876
|
brand_replacement: 'ZTE'
|
|
4667
4877
|
model_replacement: '$1'
|
|
4668
4878
|
# operator specific
|
|
4669
|
-
- regex: '; (BASE) (lutea|Lutea 2|Tab[^;]
|
|
4879
|
+
- regex: '; (BASE) (lutea|Lutea 2|Tab[^;]{0,200}?)(?: Build|\) AppleWebKit)'
|
|
4670
4880
|
device_replacement: '$1 $2'
|
|
4671
4881
|
brand_replacement: 'ZTE'
|
|
4672
4882
|
model_replacement: '$1 $2'
|
|
@@ -4675,7 +4885,7 @@ device_parsers:
|
|
|
4675
4885
|
device_replacement: '$1'
|
|
4676
4886
|
brand_replacement: 'ZTE'
|
|
4677
4887
|
model_replacement: '$1'
|
|
4678
|
-
- regex: ';
|
|
4888
|
+
- regex: '; {0,2}(vp9plus)\)'
|
|
4679
4889
|
device_replacement: '$1'
|
|
4680
4890
|
brand_replacement: 'ZTE'
|
|
4681
4891
|
model_replacement: '$1'
|
|
@@ -4735,7 +4945,7 @@ device_parsers:
|
|
|
4735
4945
|
device_replacement: 'Kindle Fire HDX 8.9" 4G'
|
|
4736
4946
|
brand_replacement: 'Amazon'
|
|
4737
4947
|
model_replacement: 'Kindle Fire HDX 8.9" 4G'
|
|
4738
|
-
- regex: '; ?Amazon ([^;/]
|
|
4948
|
+
- regex: '; ?Amazon ([^;/]{1,100}) Build\b'
|
|
4739
4949
|
device_replacement: '$1'
|
|
4740
4950
|
brand_replacement: 'Amazon'
|
|
4741
4951
|
model_replacement: '$1'
|
|
@@ -4758,22 +4968,22 @@ device_parsers:
|
|
|
4758
4968
|
|
|
4759
4969
|
#########
|
|
4760
4970
|
# Devices from chinese manufacturer(s)
|
|
4761
|
-
# @note: identified by x-wap-profile http://218.249.47.94/Xianghe
|
|
4971
|
+
# @note: identified by x-wap-profile http://218.249.47.94/Xianghe/.{0,200}
|
|
4762
4972
|
#########
|
|
4763
|
-
- regex: '(sprd)\-([^/]
|
|
4973
|
+
- regex: '(sprd)\-([^/]{1,50})/'
|
|
4764
4974
|
device_replacement: '$1 $2'
|
|
4765
4975
|
brand_replacement: '$1'
|
|
4766
4976
|
model_replacement: '$2'
|
|
4767
4977
|
# @ref: http://eshinechina.en.alibaba.com/
|
|
4768
|
-
- regex: ';
|
|
4978
|
+
- regex: '; {0,2}(H\d{2}00\+?) Build'
|
|
4769
4979
|
device_replacement: '$1'
|
|
4770
4980
|
brand_replacement: 'Hero'
|
|
4771
4981
|
model_replacement: '$1'
|
|
4772
|
-
- regex: ';
|
|
4982
|
+
- regex: '; {0,2}(iphone|iPhone5) Build/'
|
|
4773
4983
|
device_replacement: 'Xianghe $1'
|
|
4774
4984
|
brand_replacement: 'Xianghe'
|
|
4775
4985
|
model_replacement: '$1'
|
|
4776
|
-
- regex: ';
|
|
4986
|
+
- regex: '; {0,2}(e\d{4}[a-z]?_?v\d+|v89_[^;/]{1,100})[^;/]{1,30} Build/'
|
|
4777
4987
|
device_replacement: 'Xianghe $1'
|
|
4778
4988
|
brand_replacement: 'Xianghe'
|
|
4779
4989
|
model_replacement: '$1'
|
|
@@ -4795,7 +5005,7 @@ device_parsers:
|
|
|
4795
5005
|
#########
|
|
4796
5006
|
# Alcatel Windows Phones
|
|
4797
5007
|
#########
|
|
4798
|
-
- regex: 'Windows Phone [^;]
|
|
5008
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:ALCATEL)[^;]{0,200}; {0,2}([^;,\)]+)'
|
|
4799
5009
|
device_replacement: 'Alcatel $1'
|
|
4800
5010
|
brand_replacement: 'Alcatel'
|
|
4801
5011
|
model_replacement: '$1'
|
|
@@ -4803,8 +5013,7 @@ device_parsers:
|
|
|
4803
5013
|
#########
|
|
4804
5014
|
# Asus Windows Phones
|
|
4805
5015
|
#########
|
|
4806
|
-
|
|
4807
|
-
- regex: 'Windows Phone [^;]+; .*?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:ASUS|Asus)[^;]*; *([^;,\)]+)'
|
|
5016
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:ASUS|Asus)[^;]{0,200}; {0,2}([^;,\)]+)'
|
|
4808
5017
|
device_replacement: 'Asus $1'
|
|
4809
5018
|
brand_replacement: 'Asus'
|
|
4810
5019
|
model_replacement: '$1'
|
|
@@ -4812,7 +5021,7 @@ device_parsers:
|
|
|
4812
5021
|
#########
|
|
4813
5022
|
# Dell Windows Phones
|
|
4814
5023
|
#########
|
|
4815
|
-
- regex: 'Windows Phone [^;]
|
|
5024
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:DELL|Dell)[^;]{0,200}; {0,2}([^;,\)]+)'
|
|
4816
5025
|
device_replacement: 'Dell $1'
|
|
4817
5026
|
brand_replacement: 'Dell'
|
|
4818
5027
|
model_replacement: '$1'
|
|
@@ -4820,7 +5029,7 @@ device_parsers:
|
|
|
4820
5029
|
#########
|
|
4821
5030
|
# HTC Windows Phones
|
|
4822
5031
|
#########
|
|
4823
|
-
- regex: 'Windows Phone [^;]
|
|
5032
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:HTC|Htc|HTC_blocked[^;]{0,200})[^;]{0,200}; {0,2}(?:HTC|)([^;,\)]+)'
|
|
4824
5033
|
device_replacement: 'HTC $1'
|
|
4825
5034
|
brand_replacement: 'HTC'
|
|
4826
5035
|
model_replacement: '$1'
|
|
@@ -4828,7 +5037,7 @@ device_parsers:
|
|
|
4828
5037
|
#########
|
|
4829
5038
|
# Huawei Windows Phones
|
|
4830
5039
|
#########
|
|
4831
|
-
- regex: 'Windows Phone [^;]
|
|
5040
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:HUAWEI)[^;]{0,200}; {0,2}(?:HUAWEI |)([^;,\)]+)'
|
|
4832
5041
|
device_replacement: 'Huawei $1'
|
|
4833
5042
|
brand_replacement: 'Huawei'
|
|
4834
5043
|
model_replacement: '$1'
|
|
@@ -4836,7 +5045,7 @@ device_parsers:
|
|
|
4836
5045
|
#########
|
|
4837
5046
|
# LG Windows Phones
|
|
4838
5047
|
#########
|
|
4839
|
-
- regex: 'Windows Phone [^;]
|
|
5048
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:LG|Lg)[^;]{0,200}; {0,2}(?:LG[ \-]|)([^;,\)]+)'
|
|
4840
5049
|
device_replacement: 'LG $1'
|
|
4841
5050
|
brand_replacement: 'LG'
|
|
4842
5051
|
model_replacement: '$1'
|
|
@@ -4844,15 +5053,15 @@ device_parsers:
|
|
|
4844
5053
|
#########
|
|
4845
5054
|
# Noka Windows Phones
|
|
4846
5055
|
#########
|
|
4847
|
-
- regex: 'Windows Phone [^;]
|
|
5056
|
+
- 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}[^;\)]*)'
|
|
4848
5057
|
device_replacement: 'Lumia $1'
|
|
4849
5058
|
brand_replacement: 'Nokia'
|
|
4850
5059
|
model_replacement: 'Lumia $1'
|
|
4851
|
-
- regex: 'Windows Phone [^;]
|
|
5060
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:NOKIA|Nokia)[^;]{0,200}; {0,2}(RM-\d{3,})'
|
|
4852
5061
|
device_replacement: 'Nokia $1'
|
|
4853
5062
|
brand_replacement: 'Nokia'
|
|
4854
5063
|
model_replacement: '$1'
|
|
4855
|
-
- regex: '(?:Windows Phone [^;]
|
|
5064
|
+
- regex: '(?:Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)]|WPDesktop;) ?(?:ARM; ?Touch; ?|Touch; ?|)(?:NOKIA|Nokia)[^;]{0,200}; {0,2}(?:NOKIA ?|Nokia ?|LUMIA ?|[Ll]umia ?|)([^;\)]+)'
|
|
4856
5065
|
device_replacement: 'Nokia $1'
|
|
4857
5066
|
brand_replacement: 'Nokia'
|
|
4858
5067
|
model_replacement: '$1'
|
|
@@ -4860,7 +5069,7 @@ device_parsers:
|
|
|
4860
5069
|
#########
|
|
4861
5070
|
# Microsoft Windows Phones
|
|
4862
5071
|
#########
|
|
4863
|
-
- regex: 'Windows Phone [^;]
|
|
5072
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|)(?:Microsoft(?: Corporation|))[^;]{0,200}; {0,2}([^;,\)]+)'
|
|
4864
5073
|
device_replacement: 'Microsoft $1'
|
|
4865
5074
|
brand_replacement: 'Microsoft'
|
|
4866
5075
|
model_replacement: '$1'
|
|
@@ -4868,7 +5077,7 @@ device_parsers:
|
|
|
4868
5077
|
#########
|
|
4869
5078
|
# Samsung Windows Phones
|
|
4870
5079
|
#########
|
|
4871
|
-
- regex: 'Windows Phone [^;]
|
|
5080
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:SAMSUNG)[^;]{0,200}; {0,2}(?:SAMSUNG |)([^;,\.\)]+)'
|
|
4872
5081
|
device_replacement: 'Samsung $1'
|
|
4873
5082
|
brand_replacement: 'Samsung'
|
|
4874
5083
|
model_replacement: '$1'
|
|
@@ -4876,7 +5085,7 @@ device_parsers:
|
|
|
4876
5085
|
#########
|
|
4877
5086
|
# Toshiba Windows Phones
|
|
4878
5087
|
#########
|
|
4879
|
-
- regex: 'Windows Phone [^;]
|
|
5088
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)(?:TOSHIBA|FujitsuToshibaMobileCommun)[^;]{0,200}; {0,2}([^;,\)]+)'
|
|
4880
5089
|
device_replacement: 'Toshiba $1'
|
|
4881
5090
|
brand_replacement: 'Toshiba'
|
|
4882
5091
|
model_replacement: '$1'
|
|
@@ -4884,7 +5093,7 @@ device_parsers:
|
|
|
4884
5093
|
#########
|
|
4885
5094
|
# Generic Windows Phones
|
|
4886
5095
|
#########
|
|
4887
|
-
- regex: 'Windows Phone [^;]
|
|
5096
|
+
- regex: 'Windows Phone [^;]{1,30}; .{0,100}?IEMobile/[^;\)]+[;\)] ?(?:ARM; ?Touch; ?|Touch; ?|WpsLondonTest; ?|)([^;]{1,200}); {0,2}([^;,\)]+)'
|
|
4888
5097
|
device_replacement: '$1 $2'
|
|
4889
5098
|
brand_replacement: '$1'
|
|
4890
5099
|
model_replacement: '$2'
|
|
@@ -4896,7 +5105,7 @@ device_parsers:
|
|
|
4896
5105
|
#########
|
|
4897
5106
|
# Samsung Bada Phones
|
|
4898
5107
|
#########
|
|
4899
|
-
- regex: '(?:^|; )SAMSUNG\-([A-Za-z0-9\-]
|
|
5108
|
+
- regex: '(?:^|; )SAMSUNG\-([A-Za-z0-9\-]{1,50}).{0,200} Bada/'
|
|
4900
5109
|
device_replacement: 'Samsung $1'
|
|
4901
5110
|
brand_replacement: 'Samsung'
|
|
4902
5111
|
model_replacement: '$1'
|
|
@@ -4904,11 +5113,11 @@ device_parsers:
|
|
|
4904
5113
|
#########
|
|
4905
5114
|
# Firefox OS
|
|
4906
5115
|
#########
|
|
4907
|
-
- regex: '\(Mobile; ALCATEL ?(One|ONE) ?(Touch|TOUCH) ?([^;/]
|
|
5116
|
+
- regex: '\(Mobile; ALCATEL ?(One|ONE) ?(Touch|TOUCH) ?([^;/]{1,100}?)(?:/[^;]{1,200}|); rv:[^\)]{1,200}\) Gecko/[^\/]{1,200} Firefox/'
|
|
4908
5117
|
device_replacement: 'Alcatel $1 $2 $3'
|
|
4909
5118
|
brand_replacement: 'Alcatel'
|
|
4910
5119
|
model_replacement: 'One Touch $3'
|
|
4911
|
-
- regex: '\(Mobile; (?:ZTE([^;]
|
|
5120
|
+
- regex: '\(Mobile; (?:ZTE([^;]{1,200})|(OpenC)); rv:[^\)]{1,200}\) Gecko/[^\/]{1,200} Firefox/'
|
|
4912
5121
|
device_replacement: 'ZTE $1$2'
|
|
4913
5122
|
brand_replacement: 'ZTE'
|
|
4914
5123
|
model_replacement: '$1$2'
|
|
@@ -4916,15 +5125,15 @@ device_parsers:
|
|
|
4916
5125
|
#########
|
|
4917
5126
|
# KaiOS
|
|
4918
5127
|
#########
|
|
4919
|
-
- regex: '\(Mobile; ALCATEL([A-Za-z0-9\-]+); rv:[^\)]
|
|
5128
|
+
- regex: '\(Mobile; ALCATEL([A-Za-z0-9\-]+); rv:[^\)]{1,200}\) Gecko/[^\/]{1,200} Firefox/[^\/]{1,200} KaiOS/'
|
|
4920
5129
|
device_replacement: 'Alcatel $1'
|
|
4921
5130
|
brand_replacement: 'Alcatel'
|
|
4922
5131
|
model_replacement: '$1'
|
|
4923
|
-
- regex: '\(Mobile; LYF\/([A-Za-z0-9\-]
|
|
5132
|
+
- regex: '\(Mobile; LYF\/([A-Za-z0-9\-]{1,100})\/.{0,100};.{0,100}rv:[^\)]{1,100}\) Gecko/[^\/]{1,100} Firefox/[^\/]{1,100} KAIOS/'
|
|
4924
5133
|
device_replacement: 'LYF $1'
|
|
4925
5134
|
brand_replacement: 'LYF'
|
|
4926
5135
|
model_replacement: '$1'
|
|
4927
|
-
- regex: '\(Mobile; Nokia_([A-Za-z0-9\-]
|
|
5136
|
+
- regex: '\(Mobile; Nokia_([A-Za-z0-9\-]{1,100})_.{1,100}; rv:[^\)]{1,100}\) Gecko/[^\/]{1,100} Firefox/[^\/]{1,100} KAIOS/'
|
|
4928
5137
|
device_replacement: 'Nokia $1'
|
|
4929
5138
|
brand_replacement: 'Nokia'
|
|
4930
5139
|
model_replacement: '$1'
|
|
@@ -4937,7 +5146,7 @@ device_parsers:
|
|
|
4937
5146
|
device_replacement: 'Nokia $1'
|
|
4938
5147
|
brand_replacement: 'Nokia'
|
|
4939
5148
|
model_replacement: '$1$2'
|
|
4940
|
-
- regex: '(?:NOKIA|Nokia)(?:\-|
|
|
5149
|
+
- regex: '(?:NOKIA|Nokia)(?:\-| {0,2})(?:([A-Za-z0-9]+)\-[0-9a-f]{32}|([A-Za-z0-9\-]+)(?:UCBrowser)|([A-Za-z0-9\-]+))'
|
|
4941
5150
|
device_replacement: 'Nokia $1$2$3'
|
|
4942
5151
|
brand_replacement: 'Nokia'
|
|
4943
5152
|
model_replacement: '$1$2$3'
|
|
@@ -4946,12 +5155,12 @@ device_parsers:
|
|
|
4946
5155
|
brand_replacement: 'Nokia'
|
|
4947
5156
|
model_replacement: 'Lumia $1'
|
|
4948
5157
|
# UCWEB Browser on Symbian
|
|
4949
|
-
- regex: '\(Symbian; U; S60 V5; [A-z]{2}\-[A-z]{2}; (SonyEricsson|Samsung|Nokia|LG)([^;/]
|
|
5158
|
+
- regex: '\(Symbian; U; S60 V5; [A-z]{2}\-[A-z]{2}; (SonyEricsson|Samsung|Nokia|LG)([^;/]{1,100}?)\)'
|
|
4950
5159
|
device_replacement: '$1 $2'
|
|
4951
5160
|
brand_replacement: '$1'
|
|
4952
5161
|
model_replacement: '$2'
|
|
4953
5162
|
# Nokia Symbian
|
|
4954
|
-
- regex: '\(Symbian(?:/3|); U; ([^;]
|
|
5163
|
+
- regex: '\(Symbian(?:/3|); U; ([^;]{1,200});'
|
|
4955
5164
|
device_replacement: 'Nokia $1'
|
|
4956
5165
|
brand_replacement: 'Nokia'
|
|
4957
5166
|
model_replacement: '$1'
|
|
@@ -4964,7 +5173,7 @@ device_parsers:
|
|
|
4964
5173
|
device_replacement: 'BlackBerry $1'
|
|
4965
5174
|
brand_replacement: 'BlackBerry'
|
|
4966
5175
|
model_replacement: '$1'
|
|
4967
|
-
- regex: 'Play[Bb]ook
|
|
5176
|
+
- regex: 'Play[Bb]ook.{1,200}RIM Tablet OS'
|
|
4968
5177
|
device_replacement: 'BlackBerry Playbook'
|
|
4969
5178
|
brand_replacement: 'BlackBerry'
|
|
4970
5179
|
model_replacement: 'Playbook'
|
|
@@ -4996,7 +5205,7 @@ device_parsers:
|
|
|
4996
5205
|
device_replacement: 'Palm Treo $1'
|
|
4997
5206
|
brand_replacement: 'Palm'
|
|
4998
5207
|
model_replacement: 'Treo $1'
|
|
4999
|
-
- regex: 'webOS
|
|
5208
|
+
- regex: 'webOS.{0,200}(P160U(?:NA|))/(\d+).(\d+)'
|
|
5000
5209
|
device_replacement: 'HP Veer'
|
|
5001
5210
|
brand_replacement: 'HP'
|
|
5002
5211
|
model_replacement: 'Veer'
|
|
@@ -5004,7 +5213,7 @@ device_parsers:
|
|
|
5004
5213
|
device_replacement: 'HP TouchPad'
|
|
5005
5214
|
brand_replacement: 'HP'
|
|
5006
5215
|
model_replacement: 'TouchPad'
|
|
5007
|
-
- regex: 'HPiPAQ([A-Za-z0-9]
|
|
5216
|
+
- regex: 'HPiPAQ([A-Za-z0-9]{1,20})/\d+\.\d+'
|
|
5008
5217
|
device_replacement: 'HP iPAQ $1'
|
|
5009
5218
|
brand_replacement: 'HP'
|
|
5010
5219
|
model_replacement: 'iPAQ $1'
|
|
@@ -5072,18 +5281,18 @@ device_parsers:
|
|
|
5072
5281
|
brand_replacement: 'Apple'
|
|
5073
5282
|
model_replacement: 'iPhone'
|
|
5074
5283
|
# @note: desktop applications show device info
|
|
5075
|
-
- regex: 'CFNetwork
|
|
5284
|
+
- regex: 'CFNetwork/.{0,100} Darwin/\d.{0,100}\(((?:Mac|iMac|PowerMac|PowerBook)[^\d]*)(\d+)(?:,|%2C)(\d+)'
|
|
5076
5285
|
device_replacement: '$1$2,$3'
|
|
5077
5286
|
brand_replacement: 'Apple'
|
|
5078
5287
|
model_replacement: '$1$2,$3'
|
|
5079
5288
|
# @note: newer desktop applications don't show device info
|
|
5080
5289
|
# This is here so as to not have them recorded as iOS-Device
|
|
5081
|
-
- regex: 'CFNetwork
|
|
5290
|
+
- regex: 'CFNetwork/.{0,100} Darwin/\d+\.\d+\.\d+ \(x86_64\)'
|
|
5082
5291
|
device_replacement: 'Mac'
|
|
5083
5292
|
brand_replacement: 'Apple'
|
|
5084
5293
|
model_replacement: 'Mac'
|
|
5085
5294
|
# @note: iOS applications do not show device info
|
|
5086
|
-
- regex: 'CFNetwork
|
|
5295
|
+
- regex: 'CFNetwork/.{0,100} Darwin/\d'
|
|
5087
5296
|
device_replacement: 'iOS-Device'
|
|
5088
5297
|
brand_replacement: 'Apple'
|
|
5089
5298
|
model_replacement: 'iOS-Device'
|
|
@@ -5127,7 +5336,7 @@ device_parsers:
|
|
|
5127
5336
|
device_replacement: 'Asus $1'
|
|
5128
5337
|
brand_replacement: 'Asus'
|
|
5129
5338
|
model_replacement: '$1'
|
|
5130
|
-
- regex: '(?:asus
|
|
5339
|
+
- regex: '(?:asus.{0,200}?ASUS|Asus|ASUS|asus)[\- ;]*((?:Transformer (?:Pad|Prime) |Transformer |Padfone |Nexus[ _]|)[A-Za-z0-9]+)'
|
|
5131
5340
|
device_replacement: 'Asus $1'
|
|
5132
5341
|
brand_replacement: 'Asus'
|
|
5133
5342
|
model_replacement: '$1'
|
|
@@ -5159,11 +5368,11 @@ device_parsers:
|
|
|
5159
5368
|
device_replacement: 'DoCoMo $1'
|
|
5160
5369
|
brand_replacement: 'DoCoMo'
|
|
5161
5370
|
model_replacement: '$1'
|
|
5162
|
-
- regex: '([A-Za-z0-9]
|
|
5371
|
+
- regex: '^.{0,50}?([A-Za-z0-9]{1,30})_W;FOMA'
|
|
5163
5372
|
device_replacement: 'DoCoMo $1'
|
|
5164
5373
|
brand_replacement: 'DoCoMo'
|
|
5165
5374
|
model_replacement: '$1'
|
|
5166
|
-
- regex: '([A-Za-z0-9]
|
|
5375
|
+
- regex: '^.{0,50}?([A-Za-z0-9]{1,30});FOMA'
|
|
5167
5376
|
device_replacement: 'DoCoMo $1'
|
|
5168
5377
|
brand_replacement: 'DoCoMo'
|
|
5169
5378
|
model_replacement: '$1'
|
|
@@ -5171,7 +5380,7 @@ device_parsers:
|
|
|
5171
5380
|
##########
|
|
5172
5381
|
# htc
|
|
5173
5382
|
##########
|
|
5174
|
-
- regex: '\b(?:HTC/|HTC/[a-z0-9]
|
|
5383
|
+
- regex: '\b(?:HTC/|HTC/[a-z0-9]{1,20}/|)HTC[ _\-;]? {0,2}(.{0,200}?)(?:-?Mozilla|fingerPrint|[;/\(\)]|$)'
|
|
5175
5384
|
device_replacement: 'HTC $1'
|
|
5176
5385
|
brand_replacement: 'HTC'
|
|
5177
5386
|
model_replacement: '$1'
|
|
@@ -5232,18 +5441,18 @@ device_parsers:
|
|
|
5232
5441
|
device_replacement: '$1'
|
|
5233
5442
|
brand_replacement: '$2'
|
|
5234
5443
|
model_replacement: '$3'
|
|
5235
|
-
- regex: '(HbbTV)/1\.1\.1
|
|
5444
|
+
- regex: '(HbbTV)/1\.1\.1.{0,200}CE-HTML/1\.\d;(Vendor/|)(THOM[^;]{0,200}?)[;\s].{0,30}(LF[^;]{1,200});?'
|
|
5236
5445
|
device_replacement: '$1'
|
|
5237
5446
|
brand_replacement: 'Thomson'
|
|
5238
5447
|
model_replacement: '$4'
|
|
5239
|
-
- regex: '(HbbTV)(?:/1\.1\.1|) ?(?: \(;;;;;\)|);
|
|
5448
|
+
- regex: '(HbbTV)(?:/1\.1\.1|) ?(?: \(;;;;;\)|); {0,2}CE-HTML(?:/1\.\d|); {0,2}([^ ]{1,30}) ([^;]{1,200});'
|
|
5240
5449
|
device_replacement: '$1'
|
|
5241
5450
|
brand_replacement: '$2'
|
|
5242
5451
|
model_replacement: '$3'
|
|
5243
5452
|
- regex: '(HbbTV)/1\.1\.1 \(;;;;;\) Maple_2011'
|
|
5244
5453
|
device_replacement: '$1'
|
|
5245
5454
|
brand_replacement: 'Samsung'
|
|
5246
|
-
- regex: '(HbbTV)/[0-9]+\.[0-9]+\.[0-9]+ \([^;]{0,30}; ?(?:CUS:([^;]
|
|
5455
|
+
- regex: '(HbbTV)/[0-9]+\.[0-9]+\.[0-9]+ \([^;]{0,30}; ?(?:CUS:([^;]{0,200})|([^;]{1,200})) ?; ?([^;]{0,30})'
|
|
5247
5456
|
device_replacement: '$1'
|
|
5248
5457
|
brand_replacement: '$2$3'
|
|
5249
5458
|
model_replacement: '$4'
|
|
@@ -5253,7 +5462,7 @@ device_parsers:
|
|
|
5253
5462
|
##########
|
|
5254
5463
|
# LGE NetCast TV
|
|
5255
5464
|
##########
|
|
5256
|
-
- regex: 'LGE; (?:Media\/|)([^;]
|
|
5465
|
+
- regex: 'LGE; (?:Media\/|)([^;]{0,200});[^;]{0,200};[^;]{0,200};?\); "?LG NetCast(\.TV|\.Media|)-\d+'
|
|
5257
5466
|
device_replacement: 'NetCast$2'
|
|
5258
5467
|
brand_replacement: 'LG'
|
|
5259
5468
|
model_replacement: '$1'
|
|
@@ -5261,11 +5470,11 @@ device_parsers:
|
|
|
5261
5470
|
##########
|
|
5262
5471
|
# InettvBrowser
|
|
5263
5472
|
##########
|
|
5264
|
-
- regex: 'InettvBrowser/[0-9]
|
|
5473
|
+
- regex: 'InettvBrowser/[0-9]{1,30}\.[0-9A-Z]{1,30} \([^;]{0,200};(Sony)([^;]{0,200});[^;]{0,200};[^\)]{0,10}\)'
|
|
5265
5474
|
device_replacement: 'Inettv'
|
|
5266
5475
|
brand_replacement: '$1'
|
|
5267
5476
|
model_replacement: '$2'
|
|
5268
|
-
- regex: 'InettvBrowser/[0-9]
|
|
5477
|
+
- regex: 'InettvBrowser/[0-9]{1,30}\.[0-9A-Z]{1,30} \([^;]{0,200};([^;]{0,200});[^;]{0,200};[^\)]{0,10}\)'
|
|
5269
5478
|
device_replacement: 'Inettv'
|
|
5270
5479
|
brand_replacement: 'Generic_Inettv'
|
|
5271
5480
|
model_replacement: '$1'
|
|
@@ -5302,7 +5511,7 @@ device_parsers:
|
|
|
5302
5511
|
device_replacement: 'Microsoft $1'
|
|
5303
5512
|
brand_replacement: 'Microsoft'
|
|
5304
5513
|
model_replacement: '$1'
|
|
5305
|
-
- regex: '(?:MSIE|XBMC)
|
|
5514
|
+
- regex: '(?:MSIE|XBMC).{0,200}\b(Xbox)\b'
|
|
5306
5515
|
device_replacement: '$1'
|
|
5307
5516
|
brand_replacement: 'Microsoft'
|
|
5308
5517
|
model_replacement: '$1'
|
|
@@ -5326,6 +5535,14 @@ device_parsers:
|
|
|
5326
5535
|
device_replacement: 'Motorola $1'
|
|
5327
5536
|
brand_replacement: 'Motorola'
|
|
5328
5537
|
model_replacement: '$1'
|
|
5538
|
+
- regex: '; (moto[ a-zA-z0-9()]{0,50});((?: Build|.{0,50}\) AppleWebKit))'
|
|
5539
|
+
device_replacement: '$1'
|
|
5540
|
+
brand_replacement: 'Motorola'
|
|
5541
|
+
model_replacement: '$1'
|
|
5542
|
+
- regex: '; {0,2}(moto)(.{0,50})(?: Build|\) AppleWebKit)'
|
|
5543
|
+
device_replacement: 'Motorola$2'
|
|
5544
|
+
brand_replacement: 'Motorola'
|
|
5545
|
+
model_replacement: '$2'
|
|
5329
5546
|
|
|
5330
5547
|
##########
|
|
5331
5548
|
# nintendo
|
|
@@ -5363,12 +5580,12 @@ device_parsers:
|
|
|
5363
5580
|
# Samsung
|
|
5364
5581
|
##########
|
|
5365
5582
|
# Samsung Smart-TV
|
|
5366
|
-
- regex: '(SMART-TV);
|
|
5583
|
+
- regex: '(SMART-TV); .{0,200} Tizen '
|
|
5367
5584
|
device_replacement: 'Samsung $1'
|
|
5368
5585
|
brand_replacement: 'Samsung'
|
|
5369
5586
|
model_replacement: '$1'
|
|
5370
5587
|
# Samsung Symbian Devices
|
|
5371
|
-
- regex: 'SymbianOS/9\.\d
|
|
5588
|
+
- regex: 'SymbianOS/9\.\d.{0,200} Samsung[/\-]([A-Za-z0-9 \-]+)'
|
|
5372
5589
|
device_replacement: 'Samsung $1'
|
|
5373
5590
|
brand_replacement: 'Samsung'
|
|
5374
5591
|
model_replacement: '$1'
|
|
@@ -5376,7 +5593,7 @@ device_parsers:
|
|
|
5376
5593
|
device_replacement: '$1 $2$3'
|
|
5377
5594
|
brand_replacement: '$1'
|
|
5378
5595
|
model_replacement: '$2-$3'
|
|
5379
|
-
- regex: 'SAMSUNG-ANDROID-MMS/([^;/]
|
|
5596
|
+
- regex: 'SAMSUNG-ANDROID-MMS/([^;/]{1,100})'
|
|
5380
5597
|
device_replacement: '$1'
|
|
5381
5598
|
brand_replacement: 'Samsung'
|
|
5382
5599
|
model_replacement: '$1'
|
|
@@ -5423,7 +5640,7 @@ device_parsers:
|
|
|
5423
5640
|
##########
|
|
5424
5641
|
# Sony
|
|
5425
5642
|
##########
|
|
5426
|
-
- regex: 'Android [^;]
|
|
5643
|
+
- regex: 'Android [^;]{1,200}; ([^ ]+) (Sony)/'
|
|
5427
5644
|
device_replacement: '$2 $1'
|
|
5428
5645
|
brand_replacement: '$2'
|
|
5429
5646
|
model_replacement: '$1'
|
|
@@ -5457,33 +5674,33 @@ device_parsers:
|
|
|
5457
5674
|
#########
|
|
5458
5675
|
# Android General Device Matching (far from perfect)
|
|
5459
5676
|
#########
|
|
5460
|
-
- regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; WOWMobile (
|
|
5677
|
+
- regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; WOWMobile (.{1,200})( Build[/ ]|\))'
|
|
5461
5678
|
brand_replacement: 'Generic_Android'
|
|
5462
5679
|
model_replacement: '$1'
|
|
5463
|
-
- regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{0,2}
|
|
5680
|
+
- regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{0,2} {0,2}; {0,2}(.{1,200}?)( Build[/ ]|\))'
|
|
5464
5681
|
brand_replacement: 'Generic_Android'
|
|
5465
5682
|
model_replacement: '$1'
|
|
5466
|
-
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|);
|
|
5683
|
+
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); {0,2}[A-Za-z]{2}[_\-][A-Za-z]{0,2}\-? {0,2}; {0,2}(.{1,200}?)( Build[/ ]|\))'
|
|
5467
5684
|
brand_replacement: 'Generic_Android'
|
|
5468
5685
|
model_replacement: '$1'
|
|
5469
|
-
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|);
|
|
5686
|
+
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); {0,2}[A-Za-z]{0,2}\- {0,2}; {0,2}(.{1,200}?)( Build[/ ]|\))'
|
|
5470
5687
|
brand_replacement: 'Generic_Android'
|
|
5471
5688
|
model_replacement: '$1'
|
|
5472
5689
|
# No build info at all - "Build" follows locale immediately
|
|
5473
|
-
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|);
|
|
5690
|
+
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); {0,2}[a-z]{0,2}[_\-]?[A-Za-z]{0,2};?( Build[/ ]|\))'
|
|
5474
5691
|
device_replacement: 'Generic Smartphone'
|
|
5475
5692
|
brand_replacement: 'Generic'
|
|
5476
5693
|
model_replacement: 'Smartphone'
|
|
5477
|
-
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|);
|
|
5694
|
+
- regex: 'Android[\- ][\d]+(?:\.[\d]+)(?:\.[\d]+|); {0,3}\-?[A-Za-z]{2}; {0,2}(.{1,50}?)( Build[/ ]|\))'
|
|
5478
5695
|
brand_replacement: 'Generic_Android'
|
|
5479
5696
|
model_replacement: '$1'
|
|
5480
|
-
- regex: 'Android \d+?(?:\.\d+|)(?:\.\d+|); ([^;]
|
|
5697
|
+
- regex: 'Android \d+?(?:\.\d+|)(?:\.\d+|); ([^;]{1,100}?)(?: Build|\) AppleWebKit).{1,200}? Mobile Safari'
|
|
5481
5698
|
brand_replacement: 'Generic_Android'
|
|
5482
5699
|
model_replacement: '$1'
|
|
5483
|
-
- regex: 'Android \d+?(?:\.\d+|)(?:\.\d+|); ([^;]
|
|
5700
|
+
- regex: 'Android \d+?(?:\.\d+|)(?:\.\d+|); ([^;]{1,100}?)(?: Build|\) AppleWebKit).{1,200}? Safari'
|
|
5484
5701
|
brand_replacement: 'Generic_Android_Tablet'
|
|
5485
5702
|
model_replacement: '$1'
|
|
5486
|
-
- regex: 'Android \d+?(?:\.\d+|)(?:\.\d+|); ([^;]
|
|
5703
|
+
- regex: 'Android \d+?(?:\.\d+|)(?:\.\d+|); ([^;]{1,100}?)(?: Build|\))'
|
|
5487
5704
|
brand_replacement: 'Generic_Android'
|
|
5488
5705
|
model_replacement: '$1'
|
|
5489
5706
|
|
|
@@ -5508,7 +5725,7 @@ device_parsers:
|
|
|
5508
5725
|
##########
|
|
5509
5726
|
# Generic Tablet
|
|
5510
5727
|
##########
|
|
5511
|
-
- regex: '(Android 3\.\d|Opera Tablet|Tablet;
|
|
5728
|
+
- regex: '(Android 3\.\d|Opera Tablet|Tablet; .{1,100}Firefox/|Android.{0,100}(?:Tab|Pad))'
|
|
5512
5729
|
regex_flag: 'i'
|
|
5513
5730
|
device_replacement: 'Generic Tablet'
|
|
5514
5731
|
brand_replacement: 'Generic'
|
|
@@ -5517,7 +5734,7 @@ device_parsers:
|
|
|
5517
5734
|
##########
|
|
5518
5735
|
# Generic Smart Phone
|
|
5519
5736
|
##########
|
|
5520
|
-
- regex: '(Symbian|\bS60(Version|V\d)|\bS60\b|\((Series 60|Windows Mobile|Palm OS|Bada); Opera Mini|Windows CE|Opera Mobi|BREW|Brew|Mobile;
|
|
5737
|
+
- 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)'
|
|
5521
5738
|
device_replacement: 'Generic Smartphone'
|
|
5522
5739
|
brand_replacement: 'Generic'
|
|
5523
5740
|
model_replacement: 'Smartphone'
|
|
@@ -5530,7 +5747,7 @@ device_parsers:
|
|
|
5530
5747
|
##########
|
|
5531
5748
|
# Spiders (this is a hack...)
|
|
5532
5749
|
##########
|
|
5533
|
-
- 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
|
|
5750
|
+
- 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)'
|
|
5534
5751
|
regex_flag: 'i'
|
|
5535
5752
|
device_replacement: 'Spider'
|
|
5536
5753
|
brand_replacement: 'Spider'
|