C#正则转义
正则表达式是文本处理中的一把利剑。如果正则表达式构造时部分来自用户输入,则需要谨慎的对用户输入中的正则敏感字符进行安全转义替换,以防止正则表达时构造失败或发生意外注入。
下面是安全的转义代码:
/// <summary>
/// 将含有正则表达式特殊字符字符的字符串转义为安全的正则表达式字符串
/// 通常用于防止意外的正则表达式构造
/// </summary>
/// <remarks>
/// 除 .$ ^ { [ ( | ) * + ? \ 外,其他字符与自身匹配。
/// </remarks>
/// <see cref="http://msdn.microsoft.com/zh-cn/library/4edbef7e.aspx">《字符转义》</see>
static string RegexStringToCommonString(string regexStr)
{
// 关于RegexOptions.Compiled选项的使用请参见 http://blog.livid.cn/zackzhu/200711/thinking/17_395.html
// Regex replace = new Regex("[.$^{\\[(|)*+?\\\\]", RegexOptions.Compiled);
Regex replace = new Regex("[.$^{\\[(|)*+?\\\\]");
return replace.Replace(regexStr, (Match m) => "\\" + m.Value);
}
2009-5-7
突然发现Regex中的静态方法Escape和Unescape是用来专门做正则表达式的转义和取消转义的。对手册的不熟悉导致我重新发明了一个自以为很牛x的轮子。
另外Regex中提供了单次正则匹配的实用函数,以后单次应用的匹配是没有必要构建Regex对象的。
评论