正则表达式匹配用户代理有和没有一些单词

时间:2015-12-21 15:10:42

标签: java regex pattern-matching

为了区分用户代理Mobile和用户代理平板电脑,我写了这样的正则表达式:

对于手机:

.+iPhone.+|.+Android.+Mobile.+

对于平板电脑:

.+iPad.+Mobile.+|.+Android.+[^Mobile].+

尝试使用平板电脑的这些用户代理:

Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 

- > OK平板电脑

Mozilla/5.0 (Linux; Android 4.3; Nexus 10 Build/JSS15Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2307.2 Safari/537.36

- > OK平板电脑

Mozilla/5.0 (Linux; Android 4.2.2; GT-I9505 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36

- > OKTablet,这不是平板电脑......

最后一个被认为与其他人一样,但这是移动设备的用户代理,这不是我想要的......

我需要用一种模式来编写我的正则表达式,该模式考虑到有效的用户代理字符串包含Android但严格不包含" Mobile"

有人在想什么?谢谢!

1 个答案:

答案 0 :(得分:1)

此正则表达式适用于您识别平板电脑:

.+(?:iPad.+Mobile|Android(?!.+Mobile)).+

负字符类,即[^Mobile]并不意味着不是Mobile。它只是否定了个别角色。因此[^Mobile]将匹配[...]内不属于这些字符的单个字符。

RegEx Demo