5

文字列内の HTML タグに一致する次の非常に単純な正規表現があります。タグの大文字化が問題にならないように、大文字と小文字を区別しないオプションを設定しています。ただし、「コンパイル済み」オプションが設定されている場合、「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

フラグにビットごとの AND を使用しています。ビットごとの OR を使用する必要があります。

このビット:

RegexOptions.IgnoreCase & RegexOptions.Compiled

次のようにする必要があります。

RegexOptions.IgnoreCase | RegexOptions.Compiled

これは、C# に関してフラグと列挙がどのように機能するかについての良い記事です。

于 2012-05-10T13:23:09.453 に答える