Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IE用户代理regexp(包括IE11和compat视图)_C#_Regex_Internet Explorer_User Agent - Fatal编程技术网

C# IE用户代理regexp(包括IE11和compat视图)

C# IE用户代理regexp(包括IE11和compat视图),c#,regex,internet-explorer,user-agent,C#,Regex,Internet Explorer,User Agent,我需要您的帮助,为用户代理字符串创建一个特定于IE的正则表达式。我的目标是获得正确的IE版本(包括IE11),并检查浏览器是否运行“Compat View” 例如,我对IE9在正常模式下的期望结果:IE9.0 “Compat视图”中的IE9:IE 9.0 CV 当不考虑compat视图时,此模式适用于IE 10: MSIE([0-9]{1,}[\.0-9]{0,}) 但是,compat视图中的IE9将有一个类似于的用户代理字符串。。。MSIE7.0。。。Trident/5.0。此外,IE11将不

我需要您的帮助,为用户代理字符串创建一个特定于IE的正则表达式。我的目标是获得正确的IE版本(包括IE11),并检查浏览器是否运行“Compat View”

例如,我对IE9在正常模式下的期望结果:
IE9.0
“Compat视图”中的IE9:
IE 9.0 CV

当不考虑compat视图时,此模式适用于IE 10:
MSIE([0-9]{1,}[\.0-9]{0,})

但是,compat视图中的IE9将有一个类似于
的用户代理字符串。。。MSIE7.0。。。Trident/5.0
。此外,IE11将不再在字符串中使用
MSIE
(参见下面的示例)

我对正则表达式不太了解,所以我需要你帮我弄一下这个模式。虽然我认为三叉戟模式应该很明显,
/trident\/\d/

我将在C#中使用它,因此我想我需要这样做(欢迎建议):


一些可能有用的信息:

:

与IE8类似,IE9的兼容性视图将映射到IE7标准模式,在兼容性视图中,IE9的UA字符串将为:

Mozilla/4.0(兼容;MSIE 7.0;Windows NT 6.0;Trident/5.0) 在兼容性视图中,IE9通过应用程序版本号(Mozilla/4.0)和版本令牌(MSIE 7.0)将自己报告为IE7。这样做是为了兼容性从“Trident/4.0”到“Trident/5.0”的增量Trident令牌允许网站区分在Compat视图中运行的IE9和在Compat视图中运行的IE8。

Windows 7 IE11示例:
Mozilla/5.0(Windows NT 6.1;Trident/7.0;rv:11.0)与Gecko类似

使用正则表达式模式

(?:\b(MS)?IE\s+|\bTrident\/7\.0;.*\s+rv:)(\d+)
匹配所有当前已知的IE浏览器用户代理字符串和组#1 IE确定版本中匹配的数字(如果未在兼容性视图中运行)


要确定IE是否在兼容性视图中运行,请查找

\bMSIE\s+7\.0;.*\bTrident\/(\d+)\.0
组#1(在关键字“Trident”之后)中匹配的数字决定了兼容性视图中IE的版本,如下所示:

4 -> IE  8 in CV
5 -> IE  9 in CV
6 -> IE 10 in CV
7 -> IE 11 in CV

为什么需要浏览器版本?你不能使用功能检测吗?@CodeCaster我想跟踪我的应用程序中使用的IE版本。我不想为此使用功能检测(例如,没有activeX==IE11)。谢谢,但这在compat视图中如何区分IE9和IE9呢?在后一种情况下,它只会给我IE7…也许我应该发布一个关于这个的新问题,但是
MSIE([^;]*)|Trident.*如何;rv([0-9.]+)
。MSIE部件最多可匹配10个,否则将匹配trident+rv版本请注意CV中的
7->IE 11不正确。考虑这个IE11字符串,而不是在CV <代码> Mozilla / 5(Windows NT 6.1;WOW64;三叉戟/ 7;RV:11),像壁虎< /代码> @ Johan -我是对的,你是错误的。非CV中IE11的用户代理字符串将与CV的我的正则表达式模式不匹配,因为MSIE部分不存在。@Johan-请参阅
4 -> IE  8 in CV
5 -> IE  9 in CV
6 -> IE 10 in CV
7 -> IE 11 in CV