.net正则中的字符转义

.net正则中的字符转义

ID:1397077

大小:72.00 KB

页数:16页

时间:2017-11-11

.net正则中的字符转义_第1页
.net正则中的字符转义_第2页
.net正则中的字符转义_第3页
.net正则中的字符转义_第4页
.net正则中的字符转义_第5页
资源描述:

《.net正则中的字符转义》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、.NET正则中的字符转义1        概述这或许会是一个让人迷惑,甚至感到混乱的话题,但也正因为如此,才有了讨论的必要。在正则中,一些具有特殊意义的字符,或是字符序列,被称作元字符,如“?”表示被修饰的子表达式匹配0次或1次,“(?i)”表示忽略大小写的匹配模式等等。而当这些元字符被要求匹配其本身时,就要进行转义处理了。不同的语言或应用场景下,正则定义方式、元字符出现的位置不同,转义的方式也是林林总总,不一而同。2        .NET正则中的字符转义2.1     .NET正则中的转义符绝大多数语言中,“/

2、”都被作为转义符,用来转义一些具有特殊意义的字符或字符序列,比如“/n”表示换行,“/t”表示水平制表符等。而这样的转义,应用到正则中,又会有一些意想不到的变化。话题由C#中一个正则问题引出string[]test= new string[]{"//", "////"};Regex reg= new Regex("^////$");foreach (string s in test){     richTextBox2.Text+= "源字符串: " +s.PadRight(5, '')+ "匹配结果: " +re

3、g.IsMatch(s)+ "/n";}/*--------输出--------源字符串: /    匹配结果: True源字符串: //   匹配结果: False*/对于这个结果,或许有人会感到迷惑,字符串中的“//”不是代表一个经过转义的“/”字符吗?而“////”不就应该代表两个经过转义的“/”字符吗?那么上面正则匹配的结果应该是第一个为False,第二个为True才对啊?对于这一问题,直接解释或许不太容易理解,还是换种方式来解释吧。比如要匹配的字符是这样的string test= "(";那么正则如何写呢

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 

6、s in test){    richTextBox2.Text+= "源字符串: " +s.PadRight(5, '')+ "匹配结果: " +reg.IsMatch(s)+ "/n";}/*--------输出--------源字符串: /    匹配结果: True源字符串: //   匹配结果: False*/这样就简洁多了,也符合通常的理解。但同时也带来另一个问题,就是双引号的转义处理。在普通的字符串声明中,可以用“/””对双引号进行转义。string test= "

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'-

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。