我有以下非常简单的正则表达式,它匹配字符串中的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>
有人知道这里发生了什么吗?
答案 0 :(得分:16)
您对标志使用按位AND,您应该使用按位OR。
这一位:
RegexOptions.IgnoreCase & RegexOptions.Compiled
应该是:
RegexOptions.IgnoreCase | RegexOptions.Compiled
Here is a good article on how flags and enumerations work in respect to C#.