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