string str1 = Regex.Escape("[]");
if (Regex.Match("[]", str1).Success)//这行改成if (Regex.Match("\\[]", str1).Success)一样可以
{
Console.WriteLine("ok"); }
Console.Read();怎么会都匹配呢?
if (Regex.Match("[]", str1).Success)//这行改成if (Regex.Match("\\[]", str1).Success)一样可以
{
Console.WriteLine("ok"); }
Console.Read();怎么会都匹配呢?
解决方案 »
- TreeView树样式突然变形,没用到CSS, 请大家帮忙找找原因(在线等)
- 给hidden赋值并取值 在后台代码中 C#
- IE刷新弹出一个对话框 是重试还是取消 如何避免
- |M| 第三贴:我的一个存储过程,如何返回值啊要怎么写 我写的出错 谢谢 超急啊
- asp.net相关两个问题,保证给分
- 怎么能将我的sqlserver查询语句换成Access中的查询语句
- 向国庆期间还奋战在第一线的同志们致敬!! 国庆中秋大放分,放完回家去哦!进来都有份
- showModalDialog关于父子窗口问题
- 请教路过高手
- 有没有把法在调出其他页面的时候,把IE的地址栏关掉?
- html 如何 快速的专程aspx文件?
- 关于泛型的公共一个公用方法问题。
string str1 = Regex.Escape("[]");
Regex reg = new Regex(str1);
Match m = reg.Match("[]");
if (m.Success)
{
Console.WriteLine("ok");
}
Console.Read(); 其实也就相当于
Regex reg = new Regex("\\[]");
这样写不易于理解,在.NET中有更简洁的写法
Regex reg = new Regex(@"\[]");看到这里清楚了吗?
由于“[]”是正则表达式中的元字符,具有特殊意义,在匹配其本身时,需要进行转义,“\[”也就是匹本“[”本身,而只有当“[”和“]”配对出现时,“]”才是元字符,由于“\[”已转义,所以此处的“]”也就只匹配“]”本身,其实也就相当于
Regex reg = new Regex(@"\[\]");为什么是这样,因为Regex.Escape就是通过替换为转义码来转义最小的元字符集,也就是把元字符转义为普通文本字符
Regex.Escape通常在动态生成正则时使用,以避免动态输入的元字符未经转义造成异常,比如
string id = textBox1.Text;
Regex reg = new Regex(@"(?is)<div id=""" + id + @"""[^>]*>.*?</div>");
如果textBox1.Text中输入的是“a(b”,就会抛出下面的异常
正在分析“(?is)<div id="a(b"[^>]*>.*?</div>”- ) 不足。
string id = textBox1.Text;
而如果使用Regex.Escape进行处理,就不会出现异常
Regex reg = new Regex(@"(?is)<div id=""" + Regex.Escape(id) + @"""[^>]*>.*?</div>");
处理后的正则形式为
(?is)<div id="a\(b"[^>]*>.*?</div>
言归正转,楼主的两种写法的区别,看看下面的程序执行结果就一目了然了
string str1 = Regex.Escape("[]");
Regex reg = new Regex(str1);
Match m = reg.Match("[]");
if (m.Success)
{
Console.WriteLine("ok");
Console.WriteLine(m.Value);
Console.WriteLine("匹配成功起始位置:" + m.Index);
}
Console.Read();
/*--------输出---------
ok
[]
匹配成功起始位置:0
*/string str1 = Regex.Escape("[]");
Regex reg = new Regex(str1);
Match m = reg.Match("\\[]");
if (m.Success)
{
Console.WriteLine("ok");
Console.WriteLine(m.Value);
Console.WriteLine("匹配成功起始位置:" + m.Index);
}
Console.Read();
/*--------输出---------
ok
[]
匹配成功起始位置:1
*/[/code]