2012-09-14 63 views
1

我试图过滤user_agent并区分iPhone和iPad。用户代理字符串写着:正则表达式:user_agent字符串包含“a”但不包含“b”

Mozilla/5.0(ipad U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10

我现在使用正则表达式是

(iphone|iPod|blackberry|android|windows+ce) 

的打动了我大部分移动设备,并且客户很乐意这么做。

我想不匹配,如果字符串包括ipad。我一直在为此奋斗了一个小时,并认为是时候吸取一些更有经验的帮助。

回答

2

试试这个:蒂姆

^(?!.*ipad).*(iphone|iPod|blackberry|android|windows\+ce) 
+0

丁丁丁!我们有一个胜利者。谢谢! –

+0

- 编辑:啊,拍摄。没有 - 插入到ISAPI过滤器,它失败了。如果字符串包含ipad和iphone,它就会通过。如果它不包含iphone,它会过滤ipad就好了。所以,仍然在寻找... –

+0

@BillinKansasCity:我没在追踪。这里的正则表达式测试OK(虽然我不得不在我忽略的'+'之前添加一个反斜杠)。我不知道ISAPI过滤器是如何工作的;您需要打开不区分大小写的选项。如果没有这样的选项,尝试在正则表达式的开头添加'(?i)'。 –

0

^(?!.*ipad).*(iphone|iPod)建议很好地工作。然而,相比于正则表达式具有400%的CPU需求如下:

1)拆分工作于两个单独的正则表达式

正则表达式A)(iphone|ipod)

正则表达式B)(ipad)

2 )在你的脚本中做一些A和B的结果条件以适应你的需求。

这看起来像是多余的额外工作,但比填充一个正则表达式中的所有内容要快400%。

相关问题