个人博客 地址:http://www.wenhaofan.com/article/20181125220342
在开发AutuBlog项目时需要做后台的登录记录,想起浏览器的User-Agent,于是尝试从浏览器的请求头中获取一些有用的信息。
通过总结大量请求头数据写出以下正则
^Mozilla/\d\.\d\s+\(+.+?\)
该正则含义为
以Mozilla/开头+浏览器版本格式为数字.数字+空格+(+任意字符串+匹配第一个)
测试数据
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:36.0) Gecko/20100101 Firefox/36.0
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
经测试可以顺利的获取到设备 以及操作系统信息
完整工具类代码如下
1package com.autu.common.kit; 2 3import java.util.regex.Matcher; 4import java.util.regex.Pattern; 5 6import javax.servlet.http.HttpServletRequest; 7 8public class AgentUserKit { 9 private static String pattern = "^Mozilla/\\d\\.\\d\\s+\\(+.+?\\)"; 10 private static String pattern2 = "\\(+.+?\\)"; 11 private static Pattern r = Pattern.compile(pattern); 12 private static Pattern r2 = Pattern.compile(pattern2); 13 14 public static String getDeviceInfo(HttpServletRequest request) { 15 String userAgent = request.getHeader("User-Agent"); 16 return getDeviceInfo(userAgent); 17 } 18 19 private static String getDeviceInfo(String userAgent) { 20 Matcher m = r.matcher(userAgent); 21 String result = null; 22 if (m.find()) { 23 result = m.group(0); 24 } 25 26 Matcher m2 = r2.matcher(result); 27 if (m2.find()) { 28 result = m2.group(0); 29 } 30 result = result.replace("(", ""); 31 result = result.replace(")", ""); 32 return filterDeviceInfo(result); 33 } 34 35 public static String filterDeviceInfo(String result) { 36 if (StrKit.isBlank(result)) { 37 return null; 38 } 39 result = result.replace(" U;", ""); 40 result = result.replace(" zh-cn;", ""); 41 return result; 42 } 43 44 public static void main(String[] args) { 45 System.out.println(getDeviceInfo( 46 "Mozilla/5.0 (Linux; U; Android 7.0; zh-cn; MI 5s Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.128 Mobile Safari/537.36 XiaoMi/MiuiBrowser/10.2.2")); 47 } 48 49}
如果有发现不能匹配的请求头欢迎留言