5

我有以下非常简单的正则表达式,它匹配字符串中的 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>

有人知道这里发生了什么吗?

4

1 回答 1

20

您对标志使用按位与,您应该使用按位或。

这一点:

RegexOptions.IgnoreCase & RegexOptions.Compiled

应该:

RegexOptions.IgnoreCase | RegexOptions.Compiled

这是一篇关于标志和枚举如何在 C# 中工作的好文章。

于 2012-05-10T13:23:09.453 回答