正则表达式:匹配非Android移动用户代理

Regex: match non-android mobile user agents

我需要匹配一个UA,如果它包含移动,但不包含Android。我试过了

1
Windows Phone|WPDesktop|BlackBerry|Opera Mini|Opera Mobi|Silk\/|Kindle|(?!.*Android).*Mobile.*|SymbianOS

但并不总是有效。

另外,如何排除"windows"和"android"?(考虑到Windows冒充自己是安卓和iPhone…)

编辑:一些测试字符串(android、iphone、wp等):

Mozilla/5.0 (Linux; Android 4.1.2; GT-I8190N Build/JZO54K)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Mobile
Safari/537.36

Mozilla/5.0 (iPhone; CPU iPhone OS 7_1 like Mac OS X)
AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D167
Safari/9537.53

Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0;
Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 930) like iPhone OS 7_0_3
Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537

UCWEB/2.0 (Symbian; U; S60 V5; en-US; Nokia700) U2/1.0.0
UCBrowser/9.2.0.336 U2/1.0.0 Mobile

通过@avinash raj解决:

所有移动电话:

1
^(?:.*(Mobile|Android|iPhone|Windows Phone|WPDesktop|RIM|BlackBerry|Opera Mini|Opera Mobi|Silk\/|Kindle|Symbian).*)$

IOS只:

1
^(?:(?!.*?(?:Windows|Android)).*?iPhone.*)$

仅安卓系统:

1
^(?:(?!.*?(?:Windows)).*?Android.*)$

除Android和iOS以外的所有系统:

1
^(?:.*Windows Phone.*|.*WPDesktop.*|.*RIM.*|.*BlackBerry.*|.*Opera Mini.*|.*Opera Mobi.*|.*Silk\/.*|.*Kindle.*|(?!.*?(?:iPhone|Android)).*?Mobile.*|.*Symbian.*)$


你可以试试下面的正则表达式。

1
^(?:Windows Phone|WPDesktop|BlackBerry|Opera Mini|Opera Mobi|Silk\/|Kindle|(?!.*?(?:Windows|Android)).*?Mobile.*|SymbianOS)$

演示

1
\b(?:Windows Phone|WPDesktop|BlackBerry|Opera Mini|Opera Mobi|Silk\/|Kindle|(?!.*?(?:Windows|Android)).*+Mobile.*+|SymbianOS)\b

演示