Regex 在用户代理字符串中匹配非SP1 IE6的最佳正则表达式模式?

Regex 在用户代理字符串中匹配非SP1 IE6的最佳正则表达式模式?,regex,user-agent,Regex,User Agent,我需要一些代码来匹配所有不是SP1(WindowsXPSP2的一部分)的IE6版本。这是为了关闭没有正确处理gzip的IE版本 我想到的最好的办法是: MSIE [1-6]\.(?!.*?SV1) 有没有更好的模式?上面的正则表达式所做的基本上是进行前瞻,以确保SV1(表示SP1)不存在 出于测试目的,这不应匹配: Mozilla/5.0(兼容;MSIE 6.0;Windows NT 5.1;SV1;.NET CLR 1.1.4325) 但这应该: Mozilla/4.0(Windows;M

我需要一些代码来匹配所有不是SP1(WindowsXPSP2的一部分)的IE6版本。这是为了关闭没有正确处理gzip的IE版本

我想到的最好的办法是:

MSIE [1-6]\.(?!.*?SV1)
有没有更好的模式?上面的正则表达式所做的基本上是进行前瞻,以确保SV1(表示SP1)不存在

出于测试目的,这不应匹配:

Mozilla/5.0(兼容;MSIE 6.0;Windows NT 5.1;SV1;.NET CLR 1.1.4325)
但这应该:

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

您的正则表达式在匹配您正在寻找的用户代理方面做得很好,但是您应该知道,为了兼容性,有些浏览器的用户代理字符串中有“MSIE 6.0”。下面是。

为什么只使用一个正则表达式,而使用两个正则表达式会更简单。伪代码:

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

为什么不先过滤包含SV1的,然后再处理剩下的呢?我同意。正则表达式最适合查找匹配项,而不是查找非匹配项。只需查找“SV1”并排除匹配项。匹配项必须作为插入程序的一部分一次性完成。这是一个匹配(只有负前瞻)。“匹配必须在一次过程中完成,作为插入程序的一部分”-然后在问题中陈述这一点!(同时,也要寻找更好的、不受限制的软件。)