使用正则表达式来匹配字符串,如果它们包含“MSIE”但不包含“Opera”

时间:2011-12-22 15:39:36

标签: regex user-agent

我的最终目标是使用正则表达式匹配IE 7的HTTP_USER_AGENT字符串以及较低的PLUS Opera 9.0及更低版本。

这是因为这些浏览器不支持CSS“box-sizing”

我不是真正的正则表达式语法专家。

但是我浏览了我在Google上找到的OperaIE

的“http用户代理”列表
(MSIE [2-7]\.+)|(rv:1\.8\.1\.1+)|(Opera/[4-8]\.+)|(Opera [4-8]\.+)|(Opera\/9\.00+)

这是我用来匹配上述列表中所有HTTP_USER_AGENTS的正则表达式。 (我不确定该列表是否包含所有可能的用户代理。可能不是)

但无论如何,正则表达式与所有人匹配。但它也匹配一些较新版本的Opera

E.G。

Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686; de) Opera 10.10
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 6.0; tr) Opera 10.10
Mozilla/4.0 (compatible; MSIE 6.0; Linux i686 ; en) Opera 9.70
Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux x86_64; en) Opera 9.60
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 9.52

所以我走了一步。区别因素是包含“MSIE 6”的ALL OPERA版本9 PLUS。最后还包含“Opera”。

所以我需要修改我的正则表达式以匹配所有“MSIE 6”。不包含“OPERA”的字符串

正如我所说,我目前的正则表达可能不是最好的。但是,嘿,我是正则表达式的新手!

由于

亚历

1 个答案:

答案 0 :(得分:1)

您可以使用否定前瞻与Opera后跟的MSIE值不匹配,例如:

MSIE [2-7]\.\d+(?!.*Opera)|Opera[ /](?:[4-8]\.\d+|9\.00)|Opera$