思路:先分析各种手机品牌的请求头中user_agent的特点,总结出规律。然后用正则匹配来进行分类,并进行统计。最后在页面中实现可视化显示。
一.各种终端UA格式(以安卓系统为例)
Tablet
1  | Mozilla/5.0 (Linux; Android android-version; product-model Build/product-build) AppleWebKit/webkit-version (KHTML, like Gecko) Silk/browser-version like Chrome/chrome-version Safari/webkit-version  | 
Desktop
1  | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/webkit-version (KHTML, like Gecko) Silk/browser-version like Chrome/chrome-version Safari/webkit-version  | 
Mobile
1  | Mozilla/5.0 (Linux; Android android-version; product-model Build/product-build) AppleWebKit/webkit-version (KHTML, like Gecko) Silk/browser-version like Chrome/chrome-version Mobile Safari/webkit-version  | 
Note
1  | Red and italics indicates variable fields, which are described below.  | 
二. 品牌-brand
search key_word: user-agent detect type of platform device;
                 List of user agents for mobile phones
                 
按照使用量降序
- 手机phone
1.1 国外品牌
iphone
blackberry
nokia lumia
samsung
Sony
Nokia
Kindle Fire HD(KFTT) 
1.2 国内品牌
    华为,huawei和honor两个品牌,PLK-AL10是荣耀7
    小米,MI
2. 平板tablet
3. 笔记本desktop
三. 思考问题
- db中user_agent为空的,怎么得出来machine_brand?
 - 手机类型应该是从数据库中取出,而非实时分析统计的。
 - 只要手机品牌信息,不要型号等后缀。
 - user_agent 是否完整?
 - 优化还是改型
 - 数据怎么打到前台。
 
数据库操作:resources-com.xxx-portal.dao-*.xml
1  | String userAgent = request.getHeader("User-Agent");  | 
1  | //以build匹配方式,虽然可以得到build前面的型号,但不知道手机品牌,需要分类。  | 
Build下一级再分一下,还是直接匹配。
不是所有的UA都有build。
1  | Pattern p = Pattern.compile("a*b"); //将给定的正则表达式编译到模式中。  | 
pattern取出(…xxx)的字符串?
用字符串匹配方法String.comtains(),
正则怎么表示出来。数组?
序列化所有的正则,对应到机型。?
循环正则(用数组对象来表达),匹配到即跳出
java正则特殊之处:
- 转义字符时需要两个
 //- 不区分大小写在前面加上
 (?i),而js是后面加/i
四. 验证
写一个单页面?访问数据库
- 先用单个数据做实验,先看能不能匹配到,再去想怎么做模型
 - 建立分类模型
初级的正则已经完成编辑,需要 在分类,用更合理的方法,运算太复杂,循环次数影响性能。 - 拷贝到本地数据库,jdbc?查到数据
jdbc取数据(20160725),取出之后经过分析,再在数据库建一个字段,储存分析结果 - 分析结果展示,统计类型数
 
1  | SELECT * FROM portal_logrecord WHERE MACHINE_BRAND LIKE "%asus%";//模糊查询  | 
不要忽略手机的更新速度,注意最新机型。
尽量用小写,减少运算。
五. 最终匹配代码
1  | //java版本,js版本见-七[资源参考]  | 
六. 总结
- 以上正则能够匹配常见机型,得出品牌类型;不足之处是有几个重复识别了。
 - 对正则有了更深入的了解,强大的工具
 - java程序组成结构需要更深入的学习
 
七. Reference资源参考
常见User-Agent站点
UADetector:http://uadetector.sourceforge.net/
相关js库
- 本文作者: Linking
 - 本文链接: https://linking.fun/2016/07/28/常见手机品牌正则匹配/
 - 版权声明: 版权所有,转载请注明出处!