网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C# > 正文
正则表达式 Regular Expression
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/14
下载{$ArticleTitle}原创论文样式
得不匹配\"xxx\"才可以让后边的\"d\"匹配,从而使整个表达式匹配成功。因此,结果是:\"\\w+?\"匹配\"xxx\"  

Group, Back Reference(分组、反向引用)
正则表达式引擎不仅记录最终的匹配结果,使用()括起来的子表达式匹配到的文本串,在匹配过程中也会记录下来。在.Net中,可以使用Match.Groups访问某个匹配结果的所有分组。
没有指定名称的分组称为匿名分组,对所有的匿名分组都默认有一个组号。.Net中组号为0的分组是整个正则表达式,而不管这个正则表达式是否使用()括起来了。对于其它的匿名分组,根据左括号出现的先后位置依次从1开始编号。例如表达式((abc)\\d+)?(xyz)(.*)总共有5个分组,依次为0:((abc)\\d+)?(xyz)(.*), 1:((abc)\\d+), 2:(abc), 3:(xyz), 4:(.*)。
可以对分组命名,.Net中命名方法:(?<groupName>patterns)。如果存在命名分组,则所有命名分组的编号将从最后一个匿名分组的位置开始,依次递增。例如表达式((?<group1>abc)\\d+)?(?<group2>xyz)(.*)的5个分组依次为0:((?<group1>abc)\\d+)?(?<group2>xyz)(.*), 1:((?<group1>abc)\\d+), 2:(.*), 3:(?<group1>abc), 4:(?<group2>xyz)。 

在表达式的后面部分引用前面的某一个子表达式分组叫做反向引用。
对于匿名分组的反向引用方法是\"\\\" 加上分组编号,对于命名分组,.Net中的引用方法是\\k<groupName>。
 Regular Expression  Input String  Result  
 (’|\")(.*?)(\\1)   ’hello’ \"world\"   1. ’hello’
 2. \"world\"  
 (\\w)\\1{4,}   aa bbbb abcdefg ccccc 111121111 999999999   1. ccccc
 2. 99999999  
 <(?<tag1>\\w+)>[\\w\\W]*</\\k<tag1>>  <strong>Hello Kitty</strong> is the name  <strong>Hello Kitty</strong>  [Page]
注意上面表格中第二个例子的表达式与\\w{5,}的区别,(\\w)\\1{4,}表示同一个字符重复至少5次以上,而\\w{5,}表示连续5个以上字符(不必是同一个字符)。

可以禁止正则表达式记录某个分组的匹配结果,这样的分组也就不会被编号,无法被反向引用。禁止分组使用(?:patterns),例如表达式abc(?:\\w{3})(\\d+)abc总共有两个分组,组号0为整个表达式,组号1为(\\d+)。 
.Net中,\\1到\\9总是被当作反向引用;\\12这种类型,如果存在编号为12的分组,则作为反向引用,否则将\\12转义为ASCII字符,为了消除这种歧意,可以使用\\k<n>这种方式。 
注意:.Net中分组命名时尖括号<, >可以使用单引号代替。 

Lookahead, Lookbehind(正向预搜索、反向预搜索
匹配当前的某一个子表达式时,可能需要根据前面或者后面出现的字符进行判断(即上下文环境),lookahead、lookbehind就是用于这个目的。
NFA以文本串作为有穷输入字符集Σ,从文本串逐个读取字符进行匹配,所以沿着字符读取方向的是lookahead,与字符读取方向相反则为lookbehind。
lookahead: (?=patterns), (?!patterns)。lookbehind: (?<=patterns), (?<!patterns)。

  Regular Expression  Input String  Result  
 lookahead  Windows (?=NT|XP)  

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号