2、”都被作为转义符,用来转义一些具有特殊意义的字符或字符序列,比如“/n”表示换行,“/t”表示水平制表符等。而这样的转义,应用到正则中,又会有一些意想不到的变化。话题由C#中一个正则问题引出string[]test= new string[]{"//", "////"};Regex reg= new Regex("^////$");foreach (string s in test){ richTextBox2.Text+= "源字符串: " +s.PadRight(5, '')+ "匹配结果: " +re
4、?因为“(”在正则中是有特殊意义的,所以写正则时必须对它进行转义,也就是“/(”,而在字符串中,要使用“//” 来表示“/”本身,也就是Regex reg= new Regex("^//($");这个如果理解了,那再把“(”换回“/”,同样道理,在字符串中,要使用“//” 来表示“/”本身,也就是Regex reg= new Regex("^////$");通过这样的分析,可以看出,其实在以字符串形式声明的正则中,“////”匹配的实际上就是单独的一个“/”字符。总结一下它们之间的关系:输出到控制台或界面的字符串:
5、/程序中声明的字符串:string test= "//";程序中声明的正则:Regex reg= new Regex("^////$");这样解释是不是已经可以理解了,那么是不是感觉这样很笨拙?是的,在程序中以字符串形式声明的正则,涉及到转义符时就是这样笨拙的。所以在C#中,还提供了另一种字符串声明方式,在字符串前加个“@”,就可以忽略转义。string[]test= new string[]{ @"/", @"//" };Regex reg= new Regex(@"^//$");foreach (string
7、com/">onlyatest";但是在字符串前加了“@”后,“/”会被识别为“/”字符本身,这样就不能用“/””对双引号进行转义了,需要用“”””对双引号进行转义。string test= @"onlyatest";而在VB.NET中,正则的定义只有一种形式,与C#中加了“@”后的定义方式是一致的。Dim test As String()= New String(){"/", "//"}Dim reg As Regex= New Regex("^//
8、$")For Each s As String In test RichTextBox2.Text+= "源字符串:" &s.PadRight(5, ""c)& "匹配结果:" ®.IsMatch(s)&vbCrLfNext'--------输出--------'源字符串:/ 匹配结果:True'源字符串:// 匹配结果:False'-