当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  正则表达式30分钟入门教程(第二版) 2

 正则表达式30分钟入门教程(第二版) 2

点击次数:23 次 发布日期:2008-11-26 09:54:54 作者:源代码网
源代码网推荐      注释
源代码网推荐  小括号的另一种用途是能过语法(?#comment)来包含注释。例如:2[0-4]d(?#200-249)|25[0-5](?#250-255)|[01]?dd?(?#0-199)。
源代码网推荐  
源代码网推荐  要包含注释的话,最好是启用“忽略模式里的空白符”选项,这样在编写表达式时能任意的添加空格,Tab,换行,而实际使用时这些都将被忽略。启用这个选项后,在#后面到这一行结束的所有文本都将被当成注释忽略掉。
源代码网推荐  
源代码网推荐  例如,我们可以前面的一个表达式写成这样:
源代码网推荐  
源代码网推荐   (?<= # 查找前缀,但不包含它
源代码网推荐  <(w+)> # 查找尖括号括起来的字母或数字(标签)
源代码网推荐  ) # 前缀结束
源代码网推荐  .* # 匹配任意文本
源代码网推荐  (?= # 查找后缀,但不包含它
源代码网推荐  </1> # 查找尖括号括起来的内容:前面是一个"/",后面是先前捕获的标签
源代码网推荐  ) # 后缀结束
源代码网推荐  贪婪与懒惰
源代码网推荐  当正则表达式中包含能接受重复的限定符(指定数量的代码,例如*,{5,12}等)时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。考虑这个表达式:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。
源代码网推荐  
源代码网推荐  有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:
源代码网推荐  
源代码网推荐  a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab和ab(为什么第一个匹配是aab而不是ab?简单地说,最先开始的区配最有最大的优先权——The Match That Begins Earliest Wins)。
源代码网推荐  
源代码网推荐  表5.懒惰限定符 *? 重复任意次,但尽可能少重复
源代码网推荐  +? 重复1次或更多次,但尽可能少重复
源代码网推荐  ?? 重复0次或1次,但尽可能少重复
源代码网推荐  {n,m}? 重复n到m次,但尽可能少重复
源代码网推荐  {n,}? 重复n次以上,但尽可能少重复
源代码网推荐  
源代码网推荐  平衡组
源代码网推荐  如果想要匹配可嵌套的层次性结构的话,就得使用平衡组了。举个例子吧,如何把“xx <aa <bbb> <bbb> aa> yy”这样的字符串里,最长的括号内的内容捕获出来?
源代码网推荐  
源代码网推荐  这里需要用到以下的语法构造:
源代码网推荐  
源代码网推荐  (?<group>) 把捕获的内容命名为group,并压入堆栈
源代码网推荐  (?<-group>) 从堆栈上弹出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则本分组的匹配失败
源代码网推荐  (?(group)yes|no) 如果堆栈上存在以名为group的捕获内容的话,继续匹配yes部分的表达式,否则继续匹配no部分
源代码网推荐  (?!) 零宽负向先行断言,由于没有后缀表达式,试图匹配总是失败
源代码网推荐  如果你不是一个程序员(或者你是一个对堆栈的概念不熟的程序员),你就这样理解上面的三种语法吧:第一个就是在黑板上写一个(或再写一个)"group",第二个就是从黑板上擦掉一个"group",第三个就是看黑板上写的还有没有"group",如果有就继续匹配yes部分,否则就匹配no部分。
源代码网推荐  
源代码网推荐  我们需要做的是每碰到了左括号,就在黑板上写一个"group",每碰到一个右括号,就擦掉一个,到了最后就看看黑板上还有没有-如果有那就证明左括号比右括号多,那匹配就应该失败(为了能看得更清楚一点,我用了(?"group")的语法):
源代码网推荐  
源代码网推荐  < #最外层的左括号
源代码网推荐  [^<>]* #最外层的左括号后面的不是括号的内容
源代码网推荐  (
源代码网推荐  (
源代码网推荐  (?"Open"<) #碰到了左括号,在黑板上写一个"Open"
源代码网推荐  [^<>>]* #匹配左括号后面的不是括号的内容
源代码网推荐  )+
源代码网推荐  (
源代码网推荐  (?"-Open">) #碰到了右括号,擦掉一个"Open"
源代码网推荐  [^<>]* #匹配右括号后面不是括号的内容
源代码网推荐  )+
源代码网推荐  )*
源代码网推荐  (?(Open)(?!)) #在遇到最外层的右括号前面,判断黑板上还有没有没擦掉的"Open";如果还有,则匹配失败
源代码网推荐  > #最外层的右括号
源代码网推荐  还有些什么东西没提到
源代码网推荐  我已经描述了构造正则表达式的大量元素,还有一些我没有提到的东西。下面是未提到的元素的列表,包含语法和简单的说明。你可以在网上找到更详细的参考资料 来学习它们--当你需要用到它们的时候。如果你安装了MSDN Library,你也可以在里面找到关于.net下正则表达式详细的文档。
源代码网推荐  
源代码网推荐  表6.尚未详细讨论的语法 a 报警字符(打印它的效果是电脑嘀一声)
源代码网推荐   通常是单词分界位置,但如果在字符类里使用代表退格
源代码网推荐   制表符,Tab
源代码网推荐   回车
源代码网推荐  v 竖向制表符
源代码网推荐  f 换页符
源代码网推荐   换行符
源代码网推荐  e Escape
源代码网推荐  nn ASCII代码中八进制代码为nn的字符
源代码网推荐  xnn ASCII代码中十六进制代码为nn的字符
源代码网推荐  unnnn Unicode代码中十六进制代码为nnnn的字符
源代码网推荐  cN ASCII控制字符。比如cC代表Ctrl+C
源代码网推荐  A 字符串开头(类似^,但不受处理多行选项的影响)
源代码网推荐   字符串结尾或行尾(不受处理多行选项的影响)
源代码网推荐  z 字符串结尾(类似$,但不受处理多行选项的影响)
源代码网推荐  G 当前搜索的开头
源代码网推荐  p{name} Unicode中命名为name的字符类,例如p{IsGreek}
源代码网推荐  (?>exp) 贪婪子表达式
源代码网推荐  (?<x>-<y>exp) 平衡组
源代码网推荐  (?im-nsx:exp) 在子表达式exp中改变处理选项
源代码网推荐  (?im-nsx) 为表达式后面的部分改变处理选项
源代码网推荐  (?(exp)yes|no) 把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no
源代码网推荐  (?(exp)yes) 同上,只是使用空表达式作为no
源代码网推荐  (?(name)yes|no) 如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
源代码网推荐  (?(name)yes) 同上,只是使用空表达式作为no
源代码网推荐  
源代码网推荐  一些我认为你可能已经知道的术语的参考
源代码网推荐  字符
源代码网推荐  程序处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等。
源代码网推荐  字符串
源代码网推荐  0个或更多个字符的序列。
源代码网推荐  文本
源代码网推荐  文字,字符串。
源代码网推荐  匹配
源代码网推荐  符合规则,检验是否符合规则,符合规则的部分。
源代码网推荐  网上的资源及本文参考文献
源代码网推荐  微软的正则表达式教程
源代码网推荐  专业的正则表达式教学网站(英文)
源代码网推荐  关于.Net下的平衡组的详细讨论(英文)
源代码网推荐  Mastering Regular Expressions (Second Edition)
源代码网推荐    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华