当指定"编译"选项时,正则表达式"忽略大小写"选项不起作用

Joh*_*ohn 5 c# regex

我有以下非常简单的正则表达式,它匹配字符串中的HTML标记.我有不区分大小写的选项集,因此标记的大小写无关紧要.但是,当设置'compiled'选项时,似乎忽略'IgnoreCase'选项.

示例代码:

string text = "<SPAN>blah</SPAN><span>blah</span>";
Regex expr1 = new Regex("</*span>", RegexOptions.IgnoreCase);
Regex expr2 = new Regex("</*span>", RegexOptions.IgnoreCase & RegexOptions.Compiled);

MatchCollection result1 = expr1 .Matches(text); 
//gives 4 matches- <SPAN>,</SPAN>,<span> & </span>
MatchCollection result2 = expr2 .Matches(text);
//only gives 2 matches- <span> & </span>
Run Code Online (Sandbox Code Playgroud)

有谁知道这里发生了什么?

vcs*_*nes 18

您使用按位AND作为标志,您应该使用按位OR.

这一点:

RegexOptions.IgnoreCase & RegexOptions.Compiled
Run Code Online (Sandbox Code Playgroud)

应该:

RegexOptions.IgnoreCase | RegexOptions.Compiled
Run Code Online (Sandbox Code Playgroud)

这是一篇关于标志和枚举如何在C#方面起作用的好文章.

  • 我一直犯那个错误。我正在写我的旗帜,然后大声说“我想要选项A **和**选项B ...”。 (2认同)