ClickHouse/tests/queries/0_stateless/data_ua_parser/browser.yaml

1410 lines
45 KiB
YAML

- family_replacement: $1
regex: (GeoEvent Server) (\d+)(?:\.(\d+)(?:\.(\d+)|)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: '(ArcGIS Pro)(?: (\d+)\.(\d+)\.([^ ]+)|)'
v1_replacement: $2
v2_replacement: $3
- family_replacement: ArcMap
regex: ArcGIS Client Using WinInet
v1_replacement: $2
v2_replacement: $3
- family_replacement: Operations Dashboard for ArcGIS
regex: (OperationsDashboard)-(?:Windows)-(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: ArcGIS Earth
regex: (arcgisearth)/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: ArcGIS Earth
regex: com.esri.(earth).phone/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Explorer for ArcGIS
regex: (arcgis-explorer)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Collector for ArcGIS
regex: arcgis-(collector|aurora)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Workforce for ArcGIS
regex: (arcgis-workforce)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1 for ArcGIS
regex: (Collector|Explorer|Workforce)-(?:Android|iOS)-(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1 for ArcGIS
regex: (Explorer|Collector)/(\d+) CFNetwork
v1_replacement: $2
v2_replacement: $3
- family_replacement: ArcGIS Runtime SDK for $1
regex: ArcGISRuntime-(Android|iOS|NET|Qt)/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: ArcGIS Runtime SDK for $1
regex: ArcGIS\.?(iOS|Android|NET|Qt)(?:-|\.)(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: ArcGIS Runtime SDK for $1
regex: ArcGIS\.Runtime\.(Qt)\.(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(Luminary)[Stage]+/(\d+) CFNetwork
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (ESPN)[%20| ]+Radio/(\d+)\.(\d+)\.(\d+) CFNetwork
v1_replacement: $2
v2_replacement: $3
- family_replacement: AntennaPod
regex: (Antenna)/(\d+) CFNetwork
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (TopPodcasts)Pro/(\d+) CFNetwork
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (MusicDownloader)Lite/(\d+)\.(\d+)\.(\d+) CFNetwork
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(.{0,200})-iPad\/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|) CFNetwork
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(.{0,200})-iPhone/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|) CFNetwork
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(.{0,200})/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|) CFNetwork
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(Luminary)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: ESPN
regex: (espn\.go)
v1_replacement: $2
v2_replacement: $3
- family_replacement: ESPN
regex: (espnradio\.com)
v1_replacement: $2
v2_replacement: $3
- family_replacement: ESPN
regex: ESPN APP$
v1_replacement: $2
v2_replacement: $3
- family_replacement: AudioBoom
regex: (audioboom\.com)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ' (Rivo) RHYTHM'
v1_replacement: $2
v2_replacement: $3
- family_replacement: CFNetwork
regex: (CFNetwork)(?:/(\d+)\.(\d+)(?:\.(\d+)|)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: PingdomBot
regex: (Pingdom\.com_bot_version_)(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: PingdomBot
regex: (PingdomTMS)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: WebPageTest.org bot
regex: ' (PTST)/(\d+)(?:\.(\d+)|)$'
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: X11; (Datanyze); Linux
v1_replacement: $2
v2_replacement: $3
- family_replacement: NewRelicPingerBot
regex: (NewRelicPinger)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Tableau
regex: (Tableau)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Adobe CreativeCloud
regex: AppleWebKit/\d{1,10}\.\d{1,10}.{0,200} Safari.{0,200} (CreativeCloud)/(\d+)\.(\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Salesforce)(?:.)\/(\d+)\.(\d?)
v1_replacement: $2
v2_replacement: $3
- family_replacement: StatusCakeBot
regex: (\(StatusCake\))
v1_replacement: $2
v2_replacement: $3
- family_replacement: FacebookBot
regex: (facebookexternalhit)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: GooglePlusBot
regex: Google.{0,50}/\+/web/snippet
v1_replacement: $2
v2_replacement: $3
- family_replacement: GmailImageProxy
regex: via ggpht\.com GoogleImageProxy
v1_replacement: $2
v2_replacement: $3
- family_replacement: YahooMailProxy
regex: YahooMailProxy; https://help\.yahoo\.com/kb/yahoo-mail-proxy-SLN28749\.html
v1_replacement: $2
v2_replacement: $3
- family_replacement: Twitterbot
regex: (Twitterbot)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: /((?:Ant-|)Nutch|[A-z]+[Bb]ot|[A-z]+[Ss]pider|Axtaris|fetchurl|Isara|ShopSalad|Tailsweep)[
\-](\d+)(?:\.(\d+)|)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
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+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: MSIECrawler
regex: (MSIE) (\d+)\.(\d+)([a-z]\d|[a-z]|);.{0,200} MSIECrawler
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (DAVdroid)/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Google-HTTP-Java-Client|Apache-HttpClient|PostmanRuntime|Go-http-client|scalaj-http|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp|aihttp|reqwest|axios|unirest-(?:java|python|ruby|nodejs|php|net))(?:[
/](\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Pinterestbot
regex: (Pinterest(?:bot|))/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)[;\s(]+\+https://www.pinterest.com/bot.html
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
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+)|)|)|)'
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: \b(Boto3?|JetS3t|aws-(?:cli|sdk-(?:cpp|go|java|nodejs|ruby2?|dotnet-(?:\d{1,2}|core)))|s3fs)/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (FME)\/(\d+\.\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (QGIS)\/(\d)\.?0?(\d{1,2})\.?0?(\d{1,2})
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (JOSM)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Tygron Platform) \((\d+)\.(\d+)\.(\d+(?:\.\d+| RC \d+\.\d+))
v1_replacement: $2
v2_replacement: $3
- family_replacement: Facebook Messenger
regex: \[(FBAN/MessengerForiOS|FB_IAB/MESSENGER);FBAV/(\d+)(?:\.(\d+)(?:\.(\d+)(?:\.(\d+)|)|)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Facebook
regex: \[FB.{0,300};(FBAV)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Facebook
regex: \[FB.{0,300};
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
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+)|)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^.{0,200}?((?:[A-Za-z][A-Za-z0-9 -]{0,50}|)[^C][^Uu][Bb]ot)\b(?:(?:[ /]|
v)(\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
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+)|)|)'
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (HbbTV)/(\d+)\.(\d+)\.(\d+) \(
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Chimera|SeaMonkey|Camino|Waterfox)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Sailfish Browser
regex: (SailfishBrowser)/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: \[(Pinterest)/[^\]]{1,50}\]
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: '(Pinterest)(?: for Android(?: Tablet|)|)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: Mozilla.{1,200}Mobile.{1,100}(Instagram).(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: Mozilla.{1,200}Mobile.{1,100}(Flipboard).(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: Mozilla.{1,200}Mobile.{1,100}(Flipboard-Briefing).(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: Mozilla.{1,200}Mobile.{1,100}(Onefootball)\/Android.(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Snapchat)\/(\d+)\.(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Twitter
regex: (Twitter for (?:iPhone|iPad)|TwitterAndroid)(?:\/(\d+)\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Spider
regex: Mozilla.{1,100}Mobile.{1,100}AspiegelBot
v1_replacement: $2
v2_replacement: $3
- family_replacement: Spider
regex: AspiegelBot
v1_replacement: $2
v2_replacement: $3
- family_replacement: Basilisk
regex: (Firefox)/(\d+)\.(\d+) Basilisk/(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Pale Moon
regex: (PaleMoon)/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Firefox Mobile
regex: (Fennec)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Firefox Mobile
regex: (Fennec)/(\d+)\.(\d+)(pre)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Firefox Mobile
regex: (Fennec)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Firefox Mobile
regex: (?:Mobile|Tablet);.{0,200}(Firefox)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Firefox ($1)
regex: (Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)\.(\d+(?:pre|))
v1_replacement: $2
v2_replacement: $3
- family_replacement: Firefox Alpha
regex: (Firefox)/(\d+)\.(\d+)(a\d+[a-z]*)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Firefox Beta
regex: (Firefox)/(\d+)\.(\d+)(b\d+[a-z]*)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Firefox Alpha
regex: (Firefox)-(?:\d+\.\d+|)/(\d+)\.(\d+)(a\d+[a-z]*)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Firefox Beta
regex: (Firefox)-(?:\d+\.\d+|)/(\d+)\.(\d+)(b\d+[a-z]*)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Firefox ($1)
regex: (Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)([ab]\d+[a-z]*|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: MicroB
regex: (Firefox).{0,200}Tablet browser (\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (MozillaDeveloperPreview)/(\d+)\.(\d+)([ab]\d+[a-z]*|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Firefox iOS
regex: (FxiOS)/(\d+)\.(\d+)(\.(\d+)|)(\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Flock)/(\d+)\.(\d+)(b\d+?)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (RockMelt)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Netscape
regex: (Navigator)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Netscape
regex: (Navigator)/(\d+)\.(\d+)([ab]\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Netscape
regex: (Netscape6)/(\d+)\.(\d+)\.?([ab]?\d+|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: My Internet Browser
regex: (MyIBrow)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: UC Browser
regex: (UC? ?Browser|UCWEB|U3)[ /]?(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Opera Tablet).{0,200}Version/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Opera Mini)(?:/att|)/?(\d+|)(?:\.(\d+)|)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Opera Mobile
regex: (Opera)/.{1,100}Opera Mobi.{1,100}Version/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Opera Mobile
regex: (Opera)/(\d+)\.(\d+).{1,100}Opera Mobi
v1_replacement: $2
v2_replacement: $3
- family_replacement: Opera Mobile
regex: Opera Mobi.{1,100}(Opera)(?:/|\s+)(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Opera Mobile
regex: Opera Mobi
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Opera)/9.80.{0,200}Version/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Opera Mobile
regex: (?:Mobile Safari).{1,300}(OPR)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Opera
regex: (?:Chrome).{1,300}(OPR)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Opera Coast
regex: (Coast)/(\d+).(\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Opera Mini
regex: (OPiOS)/(\d+).(\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Opera Neon
regex: Chrome/.{1,200}( MMS)/(\d+).(\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: webOS Browser
regex: (hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: LuaKit
regex: (luakit)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Snowshoe)/(\d+)\.(\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: Gecko/\d+ (Lightning)/(\d+)\.(\d+)\.?((?:[ab]?\d+[a-z]*)|(?:\d*))
v1_replacement: $2
v2_replacement: $3
- family_replacement: Swiftfox
regex: (Firefox)/(\d+)\.(\d+)\.(\d+(?:pre|)) \(Swiftfox\)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Swiftfox
regex: (Firefox)/(\d+)\.(\d+)([ab]\d+[a-z]*|) \(Swiftfox\)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Rekonq
regex: (rekonq)/(\d+)\.(\d+)(?:\.(\d+)|) Safari
v1_replacement: $2
v2_replacement: $3
- family_replacement: Rekonq
regex: rekonq
v1_replacement: $2
v2_replacement: $3
- family_replacement: Conkeror
regex: (conkeror|Conkeror)/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Konqueror
regex: (konqueror)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (WeTab)-Browser
v1_replacement: $2
v2_replacement: $3
- family_replacement: Comodo Dragon
regex: (Comodo_Dragon)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Symphony) (\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: NetFront NX
regex: PLAYSTATION 3.{1,200}WebKit
v1_replacement: $2
v2_replacement: $3
- family_replacement: NetFront
regex: PLAYSTATION 3
v1_replacement: $2
v2_replacement: $3
- family_replacement: NetFront
regex: (PlayStation Portable)
v1_replacement: $2
v2_replacement: $3
- family_replacement: NetFront NX
regex: (PlayStation Vita)
v1_replacement: $2
v2_replacement: $3
- family_replacement: NetFront NX
regex: AppleWebKit.{1,200} (NX)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: NetFront NX
regex: (Nintendo 3DS)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Amazon Silk
regex: (Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Puffin)/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Edge Mobile
regex: Windows Phone .{0,200}(Edge)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Edge Mobile
regex: (EdgiOS|EdgA)/(\d+)\.(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Samsung Internet
regex: (SamsungBrowser)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: "Seznam prohl\xED\u017Ee\u010D"
regex: (SznProhlizec)/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Coc Coc
regex: (coc_coc_browser)/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Baidu Browser
regex: (baidubrowser)[/\s](\d+)(?:\.(\d+)|)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Baidu Explorer
regex: (FlyFlow)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Maxthon
regex: (MxBrowser)/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Crosswalk)/(\d+)\.(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: LINE
regex: (Line)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: MiuiBrowser
regex: (MiuiBrowser)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Mint Browser
regex: (Mint Browser)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: TopBuzz
regex: (TopBuzz)/(\d+).(\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Google
regex: Mozilla.{1,200}Android.{1,200}(GSA)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: QQ Browser Mini
regex: (MQQBrowser/Mini)(?:(\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: QQ Browser Mobile
regex: (MQQBrowser)(?:/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: QQ Browser
regex: (QQBrowser)(?:/(\d+)(?:\.(\d+)\.(\d+)(?:\.(\d+)|)|)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: DuckDuckGo Mobile
regex: Mobile.{0,200}(DuckDuckGo)/(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Tenta Browser
regex: (Tenta/)(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Chrome Mobile WebView
regex: Version/.{1,300}(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Chrome Mobile WebView
regex: ; wv\).{1,300}(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Chrome Mobile
regex: (CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Chrome Mobile iOS
regex: (CriOS)/(\d+)\.(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Chrome Mobile
regex: (Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+) Mobile(?:[ /]|$)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Chrome Mobile
regex: ' Mobile .{1,300}(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
v1_replacement: $2
v2_replacement: $3
- family_replacement: Chrome Frame
regex: (chromeframe)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Tizen Browser
regex: (SLP Browser)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Sogou Explorer
regex: (SE 2\.X) MetaSr (\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: RackspaceBot
regex: (Rackspace Monitoring)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (PRTG Network Monitor)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (PyAMF)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Yandex Browser
regex: (YaBrowser)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Mail.ru Chromium Browser
regex: (Chrome)/(\d+)\.(\d+)\.(\d+).{0,100} MRCHROME
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (AOL) (\d+)\.(\d+); AOLBuild (\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (PodCruncher|Downcast)[ /]?(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ' (BoxNotes)/(\d+)\.(\d+)\.(\d+)'
v1_replacement: $2
v2_replacement: $3
- family_replacement: Whale
regex: (Whale)/(\d+)\.(\d+)\.(\d+)\.(\d+) Mobile(?:[ /]|$)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Whale
regex: (Whale)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (1Password)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Ghost)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: PAN (GlobalProtect)/(\d+)\.(\d+)\.(\d+) .{1,100} \(X11; Linux x86_64\)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Slack Desktop Client
regex: (Slack_SSB)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: HipChat Desktop Client
regex: (HipChat)/?(\d+|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: \b(MobileIron|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Spotify|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera
Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven
for Mac|Openwave|MacOutlook|Electron|OktaMobile)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Outlook
regex: Microsoft Office Outlook 12\.\d+\.\d+|MSOffice 12
v1_replacement: '2007'
v2_replacement: $3
- family_replacement: Outlook
regex: Microsoft Outlook 14\.\d+\.\d+|MSOffice 14
v1_replacement: '2010'
v2_replacement: $3
- family_replacement: Outlook
regex: Microsoft Outlook 15\.\d+\.\d+
v1_replacement: '2013'
v2_replacement: $3
- family_replacement: Outlook
regex: Microsoft Outlook (?:Mail )?16\.\d+\.\d+|MSOffice 16
v1_replacement: '2016'
v2_replacement: $3
- family_replacement: $1
regex: Microsoft Office (Word) 2014
v1_replacement: $2
v2_replacement: $3
- family_replacement: Windows Live Mail
regex: Outlook-Express\/7\.0
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Airmail) (\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Thunderbird
regex: (Thunderbird)/(\d+)\.(\d+)(?:\.(\d+(?:pre|))|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Postbox
regex: (Postbox)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Barca
regex: (Barca(?:Pro)?)/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Lotus Notes
regex: (Lotus-Notes)/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Superhuman
regex: Superhuman
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Vivaldi)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Edge
regex: (Edge?)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Brave
regex: (brave)/(\d+)\.(\d+)\.(\d+) Chrome
v1_replacement: $2
v2_replacement: $3
- family_replacement: Iron
regex: (Chrome)/(\d+)\.(\d+)\.(\d+)[\d.]{0,100} Iron[^/]
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: '\b(Dolphin)(?: |HDCN/|/INT\-)(\d+)\.(\d+)(?:\.(\d+)|)'
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (HeadlessChrome)(?:/(\d+)\.(\d+)\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Evolution)/(\d+)\.(\d+)\.(\d+\.\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (RCM CardDAV plugin)/(\d+)\.(\d+)\.(\d+(?:-dev|))
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera
Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space
Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE
Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Dragon|Outlook-iOS-Android)/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Chromium|Chrome)/(\d+)\.(\d+)(?:\.(\d+)|)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: IE Mobile
regex: (IEMobile)[ /](\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (BacaBerita App)\/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(bPod|Pocket Casts|Player FM)$
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(AlexaMediaPlayer|VLC)/(\d+)\.(\d+)\.([^.\s]+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(AntennaPod|WMPlayer|Zune|Podkicker|Radio|ExoPlayerDemo|Overcast|PocketTunes|NSPlayer|okhttp|DoggCatcher|QuickNews|QuickTime|Peapod|Podcasts|GoldenPod|VLC|Spotify|Miro|MediaGo|Juice|iPodder|gPodder|Banshee)/(\d+)\.(\d+)(?:\.(\d+)|)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(Peapod|Liferea)/([^.\s]+)\.([^.\s]+|)\.?([^.\s]+|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(bPod|Player FM) BMID/(\S+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: '^(Podcast ?Addict)/v(\d+) '
v1_replacement: $2
v2_replacement: $3
- family_replacement: PodcastAddict
regex: '^(Podcast ?Addict) '
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Replay) AV
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (VOX) Music Player
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (CITA) RSS Aggregator/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Pocket Casts)$
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Player FM)$
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (LG Player|Doppler|FancyMusic|MediaMonkey|Clementine) (\d+)\.(\d+)\.?([^.\s]+|)\.?([^.\s]+|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (philpodder)/(\d+)\.(\d+)\.?([^.\s]+|)\.?([^.\s]+|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Player FM|Pocket Casts|DoggCatcher|Spotify|MediaMonkey|MediaGo|BashPodder)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (QuickTime)\.(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Kinoma)(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: FancyMusic
regex: (Fancy) Cloud Music (\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: ESPN
regex: EspnDownloadManager
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: '(ESPN) Radio (\d+)\.(\d+)(?:\.(\d+)|) ?(?:rv:(\d+)|) '
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (podracer|jPodder) v ?(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (ZDM)/(\d+)\.(\d+)[; ]?
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Zune|BeyondPod) (\d+)(?:\.(\d+)|)[\);]
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (WMPlayer)/(\d+)\.(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: WMPlayer
regex: ^(Lavf)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(RSSRadio)[ /]?(\d+|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: RSSRadio
regex: (RSS_Radio) (\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Podkicker
regex: (Podkicker) \S+/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(HTC) Streaming Player \S+ / \S+ / \S+ / (\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(Stitcher)/iOS
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(Stitcher)/Android
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(VLC) .{0,200}version (\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ' (VLC) for'
v1_replacement: $2
v2_replacement: $3
- family_replacement: VLC
regex: (vlc)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(foobar)\S{1,10}/(\d+)\.(\d+|)\.?([\da-z]+|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(Clementine)\S{1,10} (\d+)\.(\d+|)\.?(\d+|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Amarok
regex: (amarok)/(\d+)\.(\d+|)\.?(\d+|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Custom)-Feed Reader
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (iCab|Lunascape|Opera|Android|Jasmine|Polaris|Microsoft SkyDriveSync|The
Bat!) (\d+)(?:\.(\d+)|)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Kindle)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Android) Donut
v1_replacement: '1'
v2_replacement: '2'
- family_replacement: $1
regex: (Android) Eclair
v1_replacement: '2'
v2_replacement: '1'
- family_replacement: $1
regex: (Android) Froyo
v1_replacement: '2'
v2_replacement: '2'
- family_replacement: $1
regex: (Android) Gingerbread
v1_replacement: '2'
v2_replacement: '3'
- family_replacement: $1
regex: (Android) Honeycomb
v1_replacement: '3'
v2_replacement: $3
- family_replacement: IE Large Screen
regex: (MSIE) (\d+)\.(\d+).{0,100}XBLWP7
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Nextcloud)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (mirall)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Owncloud
regex: (ownCloud-android)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Skype
regex: (OC)/(\d+)\.(\d+)\.(\d+)\.(\d+) \(Skype for Business\)
v1_replacement: $2
v2_replacement: $3
- family_replacement: OpenVAS Scanner
regex: (OpenVAS)(?:-VT)?(?:[ \/](\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (AnyConnect)\/(\d+)(?:\.(\d+)(?:\.(\d+)|)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Monitis
regex: compatible; monitis
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Obigo)InternetBrowser
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Obigo)\-Browser
v1_replacement: $2
v2_replacement: $3
- family_replacement: Obigo
regex: (Obigo|OBIGO)[^\d]*(\d+)(?:.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Maxthon
regex: (MAXTHON|Maxthon) (\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Maxthon|MyIE2|Uzbl|Shiira)
v1_replacement: '0'
v2_replacement: $3
- family_replacement: $1
regex: (BrowseX) \((\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: NCSA Mosaic
regex: (NCSA_Mosaic)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Polaris
regex: (POLARIS)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Polaris
regex: (Embider)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Bon Echo
regex: (BonEcho)/(\d+)\.(\d+)\.?([ab]?\d+|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: TopBuzz
regex: (TopBuzz) com.alex.NewsMaster/(\d+).(\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: TopBuzz
regex: (TopBuzz) com.mobilesrepublic.newsrepublic/(\d+).(\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: TopBuzz
regex: (TopBuzz) com.topbuzz.videoen/(\d+).(\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Google
regex: (iPod|iPhone|iPad).{1,200}GSA/(\d+)\.(\d+)\.(\d+)(?:\.(\d+)|) Mobile
v1_replacement: $2
v2_replacement: $3
- family_replacement: Mobile Safari
regex: (iPod|iPhone|iPad).{1,200}Version/(\d+)\.(\d+)(?:\.(\d+)|).{1,200}[ +]Safari
v1_replacement: $2
v2_replacement: $3
- family_replacement: Mobile Safari UI/WKWebView
regex: (iPod|iPod touch|iPhone|iPad);.{0,30}CPU.{0,30}OS[ +](\d+)_(\d+)(?:_(\d+)|).{0,30}
AppleNews\/\d+\.\d+(?:\.\d+|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Mobile Safari UI/WKWebView
regex: (iPod|iPhone|iPad).{1,200}Version/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Mobile Safari
regex: (iPod|iPod touch|iPhone|iPad).{0,200} Safari
v1_replacement: $2
v2_replacement: $3
- family_replacement: Mobile Safari UI/WKWebView
regex: (iPod|iPod touch|iPhone|iPad)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Apple $1 App
regex: (Watch)(\d+),(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Outlook-iOS)/\d+\.\d+\.prod\.iphone \((\d+)\.(\d+)\.(\d+)\)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (AvantGo) (\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: ONE Browser
regex: (OneBrowser)/(\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Avant)
v1_replacement: '1'
v2_replacement: $3
- family_replacement: $1
regex: (QtCarBrowser)
v1_replacement: '1'
v2_replacement: $3
- family_replacement: iBrowser Mini
regex: ^(iBrowser/Mini)(\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(iBrowser|iRAPP)/(\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Nokia Services (WAP) Browser
regex: ^(Nokia)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Nokia Browser
regex: (NokiaBrowser)/(\d+)\.(\d+).(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Nokia Browser
regex: (NokiaBrowser)/(\d+)\.(\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Nokia Browser
regex: (NokiaBrowser)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Nokia Browser
regex: (BrowserNG)/(\d+)\.(\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Nokia Browser
regex: (Series60)/5\.0
v1_replacement: '7'
v2_replacement: '0'
- family_replacement: Nokia OSS Browser
regex: (Series60)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Ovi Browser
regex: (S40OviBrowser)/(\d+)\.(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Nokia)[EN]?(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: BlackBerry WebKit
regex: (PlayBook).{1,200}RIM Tablet OS (\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: BlackBerry WebKit
regex: (Black[bB]erry|BB10).{1,200}Version/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: BlackBerry
regex: (Black[bB]erry)\s?(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (OmniWeb)/v(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Palm Blazer
regex: (Blazer)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Palm Pre
regex: (Pre)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (ELinks)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (ELinks) \((\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Links) \((\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (QtWeb) Internet Browser/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (PhantomJS)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: WebKit Nightly
regex: (AppleWebKit)/(\d+)(?:\.(\d+)|)\+ .{0,200} Safari
v1_replacement: $2
v2_replacement: $3
- family_replacement: Safari
regex: (Version)/(\d+)\.(\d+)(?:\.(\d+)|).{0,100}Safari/
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Safari)/\d+
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (OLPC)/Update(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (OLPC)/Update()\.(\d+)
v1_replacement: '0'
v2_replacement: $3
- family_replacement: $1
regex: (SEMC\-Browser)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Teleca Browser
regex: (Teleca)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Phantom Browser
regex: (Phantom)/V(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: IE
regex: (Trident)/(7|8)\.(0)
v1_replacement: '11'
v2_replacement: $3
- family_replacement: IE
regex: (Trident)/(6)\.(0)
v1_replacement: '10'
v2_replacement: $3
- family_replacement: IE
regex: (Trident)/(5)\.(0)
v1_replacement: '9'
v2_replacement: $3
- family_replacement: IE
regex: (Trident)/(4)\.(0)
v1_replacement: '8'
v2_replacement: $3
- family_replacement: $1
regex: (Espial)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Apple Mail
regex: (AppleWebKit)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Firefox)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Firefox)/(\d+)\.(\d+)(pre|[ab]\d+[a-z]*|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: IE
regex: ([MS]?IE) (\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Python Requests
regex: (python-requests)/(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
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+)|)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: CloudFoundry
regex: ^(cf)\/(\d+)\.(\d+)\.(\S+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(sap-leonardo-iot-sdk-nodejs) \/ (\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(SAP NetWeaver Application Server) \(1.0;(\d{1})(\d{2})\)
v1_replacement: $2
v2_replacement: $3
- family_replacement: HTTPClient
regex: ^(\w+-HTTPClient)\/(\d+)\.(\d+)-(\S+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(go-cli)\s(\d+)\.(\d+).(\S+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(Java-EurekaClient|Java-EurekaClient-Replication|HTTPClient|lua-resty-http)\/v?(\d+)\.(\d+)\.?(\d*)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(ping-service|sap xsuaa|Node-oauth|Site24x7|SAP CPI|JAEGER_SECURITY)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Python aiohttp
regex: (Python/3\.\d{1,3} aiohttp)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Java)[/ ]?\d+\.(\d+)\.(\d+)[_-]*([a-zA-Z0-9]+|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (minio-go)/v(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(ureq)[/ ](\d+)\.(\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(http\.rb)/(\d+)\.(\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(GuzzleHttp)/(\d+)\.(\d+).(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(grab)\b
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(Cyberduck)/(\d+)\.(\d+)\.(\d+)(?:\.\d+|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(S3 Browser) (\d+)[.-](\d+)[.-](\d+)(?:\s*https?://s3browser\.com|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (S3Gof3r)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: \b(ibm-cos-sdk-(?:core|java|js|python))/(\d+)\.(\d+)(?:\.(\d+)|)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(rusoto)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(rclone)/v(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: ^(Roku)/DVP-(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: Kurio App
regex: (Kurio)\/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: '^(Box(?: Sync)?)/(\d+)\.(\d+)\.(\d+)'
v1_replacement: $2
v2_replacement: $3
- family_replacement: ViaFree
regex: ^(ViaFree|Viafree)-(?:tvOS-)?[A-Z]{2}/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Transmit)/(\d+)\.(\d+)\.(\d+)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: (Download Master)
v1_replacement: $2
v2_replacement: $3
- family_replacement: $1
regex: \b(HTTrack) (\d+)\.(\d+)(?:[\.\-](\d+)|)
v1_replacement: $2
v2_replacement: $3