我正在尝试编写一个正则表达式,它接受一个字符串并将它们构建为一个表达式作为范围。我使用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
。我可以用}
和]
替换\}
和\]
个字符,但还有其他任何字符都不会被此转义方法转义吗?我能依靠吗?
答案 0 :(得分:4)
来自here:
通过将其替换为转义码来转义一组最小字符(\,*,+,?,|,{,[,(,),^,$ ,.,#和空格)。
并且
当Escape方法转义直开括号([)并打开大括号({)字符时,它不会转义它们对应的结束字符(]和})。在大多数情况下,没有必要逃避这些。如果右括号或括号前面没有相应的开头字符,则正则表达式引擎会按字面解释它。