动态C#regex模式中的词边界问题

动态C#regex模式中的词边界问题,c#,regex,C#,Regex,我试图用从数据库检索到的模式的某些部分构建一个正则表达式模式 比如说 string pt= "@\"\\b(" + db.GetPattern + ")\\b\""; Regex regex = new Regex(pt, RegexOptions.IgnoreCase | RegexOptions.Compiled); return regex.Replace(input, "*"); 虽然我试图逃避它,但我无法让它发挥作用。如果我按照以下方式手动构建模式 Regex reg

我试图用从数据库检索到的模式的某些部分构建一个正则表达式模式

比如说

string pt= "@\"\\b(" + db.GetPattern + ")\\b\"";        
Regex regex = new Regex(pt, RegexOptions.IgnoreCase | RegexOptions.Compiled);
return regex.Replace(input, "*");
虽然我试图逃避它,但我无法让它发挥作用。如果我按照以下方式手动构建模式

Regex regex = new Regex(@"\b(test|test2)\b", RegexOptions.IgnoreCase | RegexOptions.Compiled);
return regex.Replace(input, "*");
它很好用。

试试看

string pt = @"\b(" + db.GetPattern + @")\b";
或者:

string pt = string.Concat(@"\b(", db.GetPattern, @")\b");
基本原因是,您作为示例给出的模式和您正在构建的字符串完全不同。像文本字符串之类的东西,例如
@“foo”
只对C#编译器重要,编译后所有字符串都相等。两个字符串
@“\b”
“\\b”
完全相等,唯一的区别在于C#编译器如何计算其中的转义字符。这意味着绝对没有必要将C#语法合并到运行时使用的字符串中

基本上,您创建的字符串包含:

@"\b(test|test2)\b"
而你想要的是图案

\b(test|test2)\b
所以像
@
符号和引号这样的部分是正则表达式的文本。因此它不匹配