正規表現にはそのままの文字列も使用してください。msdn の文字列リテラルを参照してください。
Console.WriteLine(Regex.IsMatch(@"C:\User\User\My Documents\Visual Studio 2010\Project\", @"\bProject\b"));
そうしないと、2回エスケープする必要があります
Console.WriteLine(Regex.IsMatch(@"C:\User\User\My Documents\Visual Studio 2010\Project\", "\\bProject\\b"));
通常の文字列と逐語的な文字列の違いを確認する
string input = @"C:\User\User\My Documents\Visual Studio 2010\Project\";
string reg = "\bProject\b";
string regVerbatim = @"\bProject\b";
Regex r = new Regex(reg);
Regex rVerbatim = new Regex(regVerbatim);
Console.Write("Regular String regex: " + r.ToString() + " isMatch :");
Console.WriteLine(r.IsMatch(input));
Console.Write("Verbatim String regex: " + rVerbatim.ToString() + " isMatch :");
Console.WriteLine(rVerbatim.IsMatch(input));
出力:
通常の文字列 regex:Projec isMatch :False
Verbatim String regex: \bProject\b isMatch :True
通常の文字列では、正規表現の最後の「t」が削除され、単語の前の空の文字列も削除されます。これは、文字列\b
がバックスペースとして解釈され、正規表現インタープリターに渡されないためです。
そのため、バックスラッシュをエスケープして from\\bProject\\b
\bProject\b
が正規表現インタープリターに渡されるようにするか、逐語的な文字列を使用して、文字列が . を解釈しないようにします\b
。