`
leonzhx
  • 浏览: 793564 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

读《正则表达式30分钟入门教程》有感

阅读更多

正则表达式30分钟入门教程》 是一篇非常精彩的正则表达式入门介绍的文章,文章部分翻译自《The 30 Minute Regex Tutorial》。很早之前我就曾拜读过,印象很深刻。今天再次拜读,是想温故一下正则表达式的知识。这次读得比较细致,对正则表达式又有了更深刻的认识,现分享如下:

 

1.  “分枝条件”一节中,作者说\(?0\d{2}\)?[- ]?\d{8}|0\d{2}[- ]?\d{8}可以 “匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔”。但其实这个表达式,依然可以匹配“010)12345678”这样的case。正确的表达式应该是:\(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}应该是作者的笔误。

 

 

2.  “后向引用”一节中,作者对(?:exp)的使用原因卖了一个关子,我个人理解是,使用这个是为了performance的原因,如果你对这个分组并不感兴趣,没有必要去捕获它,捕获它势必会消耗一定的时间与空间。

 

3.  “零宽断言”一节中,作者提到:“((?<=\d)\d{3})+\b,用它对1234567890进行查找时结果是234567890” , 个人觉得这个例子举得不好,因为(\d{3})+\b同样能达到目的,这里体现不出断言的作用。我想到了一个好玩的例子:用 ab(?=cd)ef 去匹配abcdef 会怎么样呢?

 

4.  “负向零宽断言”一节,我本来一直觉得“负向零宽断言”完全可以由“零宽断言”替代,比如\b\w*q(?!u)\w*\b 与 \b\w*q(?=[^u])\w*\b是等价的。但其实不然,我们并不能表达任何正则表达式的反向意思,比如[abcd]的反向意思是[^abcd],但abcd的反向意思是什么呢? \b((?!abc)\w)+\b 就没法用"零宽断言"来取代。

 

5.  “平衡组/递归匹配”一节,压栈操作与出栈操作的语法与命名组的语法是一样的,是不是说,每个有名字的组都会被压栈,且组名不能以减号开始,以免与出栈操作混淆?(不懂.Net ,所以没法验证:P)

 

6.  最后,我想说看这样一篇文章,如果用心看并且边看边实践的话确实不止30分钟。在此推荐一个很好的网站:http://regex101.com/ 可以很方便地测试正则表达式(并且它支持Possessive数量修饰符"+")。

 

 

 

 

 

1
0
分享到:
评论
2 楼 leonzhx 2013-02-26  
kidneyball 写道
(?:)的使用原因除了避免浪费空间,还避免了产生过多的子分组导致难以判断哪个子组中包含真正想要的信息。

学习正则,如果使用windows的话建议装个regexbuddy ( http://www.regexbuddy.com/ )


谢谢 :)
1 楼 kidneyball 2013-02-26  
(?:)的使用原因除了避免浪费空间,还避免了产生过多的子分组导致难以判断哪个子组中包含真正想要的信息。

学习正则,如果使用windows的话建议装个regexbuddy ( http://www.regexbuddy.com/ )

相关推荐

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

    正则表达式30分钟入门教程(第二版),高清PDf格式

    正则表达式30分钟入门教程-附常用表达式.chm

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。...这个30分钟入门教程将带你逐步了解并应用这些概念,同时提供的常用表达式可以作为参考,帮助你在实际项目中快速解决相关问题。

    正则表达式30分钟入门教程-附常用表达式.zip

    正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的...

    正则表达式30分钟入门教程.rar

    当然,如果你看完了这篇教程之后,发现自己明白了很多,却又几乎什么都记不得,那也是很正常的——我认为,没接触过正则表达式的人在看完这篇教程后,能把提到过的语法记住80%以上的可能性为零。这里只是让你明白...

    正则表达式30 分钟入门教程

    尽管入门教程能够在较短时间内提供基础知识,但正则表达式的高级用法往往需要更深入的学习和实践。对于一些复杂的正则表达式编写,例如在文本处理中提取特定数据,可能需要编写者具备较强的逻辑分析能力和经验积累。...

    正则表达式30分钟入门教程。轻松简单易学

    正则表达式30分钟入门教程旨在帮助初学者快速掌握这一强大的工具,使你在短时间内能够熟练应用。 一、正则表达式的基础概念 1. 元字符:正则表达式中的特殊字符,如`.`表示任意字符,`*`表示前面的字符可以出现...

Global site tag (gtag.js) - Google Analytics