net正则表达式.逃生不能正常工作

本文关键字:工作 常工作 正则表达式 逃生 不能 net | 更新日期: 2023-09-27 18:16:06

我试图写一个正则表达式,它需要一串字符,并将它们构建成一个表达式作为一个范围。我用正则表达式。Escape (.net 3.5)对这些字符串进行消毒,这样就不会留下任何控制字符。但是,似乎转义方法不像预期的那样工作,并且不会转义关闭}]字符。它不应该逃避这些吗?下面是我正在做的一个例子:

string test = @"sdfz346gv][)(}{><";
string pattern = "[" + Regex.Escape(test) + "]+";
string input = "ffff{444}g";
if (Regex.IsMatch(input, pattern))
{
    Console.WriteLine("Matched");
}
else
{
    Console.WriteLine("Not Matched");
}

pattern字符串似乎具有[sdfz346gv]'[')'(}'{><]+值,不会匹配ffff{444}g,但就我而言,它应该看起来像[sdfz346gv']'[')'('}'{><]+,这是一个执行不同的表达式,并将匹配ffff{444}g。我可以用'}']替换}]字符,但是还有其他字符没有通过这种转义方法转义吗?我能信赖它吗?

net正则表达式.逃生不能正常工作

从这里:

逃最小的一组字符 (', *, +, ?, |, {, [, (,), ^, $,., #和空格),将它们替换为它们的转义码。

虽然Escape方法转义了右大括号([)和右大括号({)字符,但它不转义它们对应的右大括号(]和})。在大多数情况下,转义这些是不必要的。如果右括号或大括号前面没有相应的开始字符,正则表达式引擎将按字面意思解释它。