2009-05-09 32 views
1

我需要一些代碼來匹配所有不是SP1的IE6版本(Windows XP SP2的一部分,令人困惑的是eh)。這是爲了將IE瀏覽器的版本轉換爲無法正確處理的版本。用於匹配用戶代理字符串中的非SP1 IE6的最佳正則表達式模式?

我想出的最好的是:

MSIE [1-6]\.(?!.*?SV1) 

有沒有人有一個更好的模式?上面的正則表達式基本上是做一個前瞻來確保SV1(表示SP1)不存在。

出於測試目的,這應該不匹配:

Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4325) 

但這應該:

Mozilla/4.0 (Windows; MSIE 6.0; Windows NT 6.0) 
+2

爲什麼不先過濾包含SV1的SV1,然後再處理其餘的? – 2009-05-09 09:12:46

+0

我同意。正則表達式最適合尋找*匹配*,而不是尋找*不匹配*。只要尋找「SV1」,並排除那些匹配。 – Tomalak 2009-05-09 09:40:00

+0

作爲插入程序的一部分,必須一次完成比賽。這是一場比賽(只有負面的預測)。 – 2009-05-09 09:45:04

回答

0

你的正則表達式匹配做你要找的用戶代理的一個很好的工作,但您應該知道某些瀏覽器的用戶代理字符串中具有「MSIE 6.0」以實現兼容性。這裏是a list of user-agent strings

0

爲什麼只用一個正則表達式,當兩個會更簡單。僞代碼:

if String.matches('\bMSIE [1-6]\b') AND NOT String.matches('\bSV1\b')