1

我正在尝试编写一个正则表达式,它接受一个字符串并将它们构建为一个表达式作为一个范围。我使用 Regex.Escape (.net 3.5) 来清理这些字符串,这样就不应该留下任何控制字符。但似乎 Escape 方法没有按预期工作,并且不会逃避关闭}]字符。它不应该逃避这些吗?这是我正在做的一个例子:

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。我可以用 and 替换}and]字符,\}但是\]有没有其他字符不能被这种转义方法转义?我可以依靠它吗?

4

1 回答 1

4

这里

通过用转义码替换最小字符集(\、*、+、?、|、{、[、(,)、^、$、.、# 和空格)来转义它们。

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

于 2013-05-29T13:34:32.637 回答