2012-09-14 96 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%。

相關問題