`

正则表达式学习的故事

阅读更多

        做为程序猿,我们肯定或多或少的使用过正则表达式。
这时候你可能去网上拷贝一段代码,像验证邮箱,验证网址,验证只包含数字或
字母的密码等,copy很容易。但是你想过要多学点正则的东西了吗?或者你从学
习某一门编程语言的过程中接触到了一些,但是感觉还是不够用,想多学点。如
果真的是这样的话,我建议你去看书吧,因为这时候一本完整介绍正则的书籍带
给你的收获比网上零碎的知识介绍要好很多。当然如果你感觉你用的不多不需要
学。没关系,兴趣和好奇心最重要,等到有兴趣的时候再去学习吧。

       这里我总结一下我学习正则的心得。

      
  1. 我要好好学习正则部分:

  2.        我下定决心好好学习正则的想法还是来源于我在学习编程的过程中功能碰到
    问题需要解决。但是在我把眼前的问题解决后,我在想为什么要用正则来解决这
    个问题。比如碰到验证一个字符串里只包含数字或字母的情况,如果不用正则要
    怎么处理,如果用了正则怎么处理。比较后我发现正则里的元字符太厉害了。我
    当时就想正则里还多少元字符?抱着这个想法,我首先去看了java中的regex类的
    文档。因为我是最先学会使用java这门编程语言的。但是我看了之后,并没有真
    的懂正则表达式。最多的收获只是多强迫自己学了几个java中正则的元字符而已。
    现在回想起来,如果当时有人介绍我去看《精通正则表达式》这本书的话,可能
    我会收获更多。也许那本书当时还没翻译成中文,介绍给我估计也不敢看!!

           在我以为我自己对正则有所了解的时候,我接触到我的第二门语言-javascript。
    因为当时写一些网页程序的时候,发现偶尔也会碰到正则。但是我用的时候,
    发现在java里能用的正则表达式字符串直接copy到javascript里使用就有错误。不
    一样的语言,不一样的正则——的确这个观点看起来是对的。但是为什么会这样,
    他们为什么有些地方是一样的,而有些地方是不一样的。这个问题后来真正的得
    到解释是在了解了下正则表达式的发展史,知道编程语言把这些东西集成到自己
    的语言里并加以改造之后才造成的。所以在众多支持正则的工具或语言里都存在
    着些许细节的不同。在最全面的正则表达式语言里,能提供的功能就那么多,别
    看《精通正则表达式》这本书这么厚。

          在我参加工作一年后,我自己隐约感觉到我要系统的学习下正则表达式,然后
    我在Amazon上就找到了《精通正则表达式》(Jeffrey E.F.Friedl著,余晟译) 这
    本书,忍不住要赞下,这本书的作者和翻译者都不错,在国内出版和翻译都一团
    糟的情况下,能看到这种水平的东西真的很欣慰。

          
  3. 真正学习正则部分:

  4.         按照《精通正则表达式》这本书的章节构造,我循序渐进的去看了这本书,
    在短期内就有好多收获。

    我认为要学好正则的话,基本以下东西你最好能知道.

          1.懂一些字符编码的知识,并知道在正则里怎么运用。


           这些知识不是你常用的,但是我放在第一位。是因为它很重要。
           一般,我们所使用的正则引擎都是嵌入在某一门编程语言里或工具里,那么
    该编程语言或工具对字符的编码就决定了所写的正则能支持多少编码。当我们真
    的要关注编码的时候,会遇到正则引擎能识别这种编码吗?正则引擎是采用哪种
    编码来处理这种编码字符的,对这种编码支持程度是多少等等一些问题?不过在
    一般的编程中我们基本不需关心编码问题。现在的编程语言大多数都是支持
    unicode编码的。而嵌入的正则引擎也是支持unicode编码的。

          2.常用元字符要熟记。至少熟记常用的语言里的常见元字符写法。
      
          像“\d”可以匹配0至9这10个数字一样,正则里有非常多的这样的元字符,不
    过也没有多到让人害怕的地步。只不过略微与点让人不爽的地方就是不同的编程
    语言在支持同一种正则意思的过程中产生了不同的表达式写法,就是我们所谓的
    方言。在你不确定的时候需要去查下资料才能确定。如果如上这些对元字符的描
    述让你认为你已经了解正则的元字符的话,那我表示抱歉。在元字符这一块还有
    一些东西,比如说一般我们匹配的是字符,而有时候我们需要匹配的是位置,比
    如在hello和word之间的位置,行首位置,行末位置等。还有如一些表达匹配程度
    的量词元字符,如+表示至少要匹配到一次,*表示要匹配0次到多次,?表示要
    匹配0到1次等。眼睛看的见的字符,看不见的字符都有对应的元字符来匹配它。
    可以说元字符是我们学习正则的第一步。记住常见的元字符,我要记住常见的元
    字符 。

           3.知道如下这些不常见的元字符

           反向引用(或捕获)元字符,环视元字符,注释元字符,非捕获分组元字符。

           这些知识点基本还是元字符章节里的内容。在不同的语言里元字符的写法不
    同,有些还是不支持的。这个具体要用到的话,要参考相关的文档。


           4.转义

           转义这个东西,用的比较多的是当我们在文本里有类似元字符字样的字符,
    如\d,我们的正则表达式不能也写成\d,怎么办?这时候就是要转义,把元字符转
    换成普通字符,在java中基本就是\\d,在一般的语言里转义基本是反斜线来表示
    的,所以在元字符前面加个反斜线就可以了。这个是我的理解,其实还有一种解
    释就是d是普通字符,转义下,\d表示元字符,再转义下变成了\\d。\\是转义的
    转义。不管怎么样,能理解就行。因为平时我们碰到的元字符不一定都是类似这
    种带反斜线的表示,如表示行首行尾位置的^和$等。

           5.替换

           替换不是正则的功能,但却是编程语言集成正则后的最实用的功能。

           6.陷阱

          在了解元字符的基础上,想要精准的使用它们,你要学习如何避免陷于各种
    元字符所设下的小陷阱,这个并不是说元字符有问题,而是你运用这些元字符的
    时候,你的逻辑很可能会出现问题。关于这个知识点有很多东西,在你看这本书
    的时候,作者对元字符讲解的时候会罗列出来这些小陷阱,注意点它。当你下次
    不小心碰到了,没关系,下下次就记住了。反正是逐步学习深入的过程吗!!

            7.建立自己的正则库。

            在平时工作过程中,可以收集一些正则表达式库的网站。给你提供方便实用。
            有两个好处,
                   a.验证你写的正则表达式对不对;
                   b.寻找常见的正则表达式。还得提醒一句,  如果你发现了网站上的正则
                      有问题的话,就要自己修正这个些问题了。并且把修正好的正则也贡
                      献给网站,做好注释,方便他人。

      这里只是做个简单的总结,对于想学正则的朋友来说,自己去看书学习,收获
是最大的。对了,如果大家想用vim这种编辑器的话,正则更是要懂的。

分享到:
评论
2 楼 eyeit2000 2013-05-11  
谢谢,不擅长码文字,码这点东西,都写了好久......
1 楼 chinaemerson 2013-05-07  
楼主加油!

相关推荐

    正则表达式趣味例子集合

    7. **学习和调试正则表达式** - 工具如Regex101和RegExr提供在线测试平台,便于试验和调试正则表达式。 - 掌握常见正则表达式模式,如IP地址、日期、货币等,可以构建一个强大的工具箱。 总之,正则表达式是一个...

    正则表达式解析库

    通过这些文件,我们可以学习到正则表达式库的实现细节、使用方法以及其背后的设计思路。对于开发人员来说,深入理解正则表达式和其解析库的内部工作原理,将有助于提升文本处理的效率和准确性。

    Regular-Expressions-Google-Analytics

    在IT领域,特别是数据分析与网站优化的范畴内,正则表达式(Regular Expressions,简称RegEx)在谷歌分析...随着实践经验的积累,你会发现正则表达式在谷歌分析中的无限潜力,以及它如何帮助你揭示数据背后的故事。

    html中实现邮箱注册,包含验证码

    这段代码定义了一个正则表达式,用于匹配常见的邮箱格式,并通过`test()`方法检查输入的邮箱是否符合该模式。 然后,我们谈谈注册码。注册码通常用于增加安全性,防止恶意注册。你可以通过服务器生成一个随机的唯一...

    PYTHON程序设计教学大纲.doc

    这部分将结合历史人物(如两弹一星元勋)的故事,引导学生学习字符串处理,同时训练他们在实际问题中使用正则表达式和类型转换。 控制结构部分涵盖了算法,程序编写,数据处理,分支结构,循环控制,异常处理等。...

    资料备份-推荐C读本.zip

    8. "正则表达式30分钟入门教程-V2.33.pdf" 是关于正则表达式的速成教程,虽然不是直接与C语言相关,但正则表达式在文本处理和字符串操作中经常用到,是程序员必备的技能之一。 综上所述,这个压缩包是一个全面的...

    2010 最新 javascript 特效 开发手册 chm

    7. **正则表达式**:JavaScript的正则表达式是进行文本匹配和处理的强大工具。手册可能包含正则表达式的语法和常用模式。 8. **错误处理**:良好的错误处理机制是提高代码健壮性的重要部分。手册可能讨论了try......

    小甲鱼零基础入门学习Python+全套源码课件

    - **正则表达式**:教授正则表达式的语法和匹配规则,演示如何使用re模块进行文本处理任务。 7. **标准库与第三方库** - **标准库概览**:列出Python标准库中的重要模块,如os、sys、math等,并简述各自的功能。 ...

    2009年最新最好的javascript编程手册 chm

    8. **正则表达式**:正则表达式是用于匹配字符串模式的工具,JavaScript提供了强大的正则表达式支持,常用于数据验证和字符串处理。 9. **错误处理**:通过try...catch语句捕获并处理运行时错误,是编写健壮代码的...

    除虫随记

    标题“除虫随记”揭示了这是一个关于软件开发中错误排查和修复的故事,涉及的关键技术是C#(cs)、调试(debug)以及正则表达式(regx)。在.NET框架下,程序员经常使用这些工具和技术来优化和维护源代码。 描述中提到...

    Storytizer:用户辅助故事生成器(一个迷你黑客松生日礼物)

    作为一个个人项目,该项目使我能够学习更多有关Java语言中的AJAX和正则表达式的知识(以及为我的朋友带来数小时的娱乐活动)。 在项目的未来迭代中,我希望添加按钮以增加占位符的数量,并允许将占位符保存到本地...

    Python爬虫项目之爬取豆瓣有关张国荣的日记.zip

    5. **正则表达式**:在提取特定格式的数据时,正则表达式(regex)非常有用。学会编写简单的正则模式以匹配和提取文本。 6. **豆瓣API**:虽然豆瓣没有公开的官方API供爬虫直接使用,但可以通过分析网页结构间接...

    Python爬虫教程+数据可视化

    正则表达式则用于进一步筛选和匹配所需信息;最后,数据存储环节可能涉及CSV、JSON或数据库如SQLite等,将抓取到的数据保存下来。 接下来,我们转向数据可视化。数据可视化是将复杂数据转化为易于理解的图形或图像...

    JavaScript编程精解

    如果你只想阅读一本关于JavaScript的图书,那么本书应该是你的首选...第8~12章则将重心转移到JavaScript环境中可用的工具上,分别详细讲解了正则表达式、与Web编程相关的知识、文档对象模型、浏览器事件和HTTP请求等。

    python学习资料2.rar

    读者可以学习到如何解析HTML和XML文档,使用正则表达式提取数据,以及如何处理JavaScript渲染的页面。同时,该书还可能涉及如何规避反爬策略,设置代理IP,以及如何存储和清洗抓取的数据。通过实际的项目案例,读者...

    Beautiful Code

    - 如何使用正则表达式进行文本处理和数据验证。 9. **创新与创造力**: - 讨论技术创新的重要性以及如何培养创新能力。 - 分析成功创新项目的背后故事。 10. **过程改进**: - 过程改进的方法论,如六西格玛、...

    用Python爬取网上的故事每天微信自动发给女朋友

    这通常涉及字符串操作、正则表达式等技能。 4. **定时任务**:为了实现“每天八点自动发送”,开发者需要设置定时任务。在Windows系统中,可以使用任务计划程序(Task Scheduler),或者在Python中使用APScheduler...

    Python_大卫·阿滕伯勒讲述你的生活.zip

    2. **字符串处理**:字符串的创建、操作(如切片、连接、查找、替换、格式化输出)以及正则表达式的基本使用。 3. **列表、元组和字典**:理解这些内置数据结构的特性和用途,如何进行元素的添加、删除和访问。 4....

    python文本爬虫(爬好-看-视频网站)下载急用

    3. **re (正则表达式)**: 在解析过程中,我们可能需要对某些特定格式的数据进行匹配和提取,这时可以使用正则表达式。Python的内置`re`模块提供了丰富的功能来处理字符串模式匹配。 4. **os**: 这个库提供了与操作...

Global site tag (gtag.js) - Google Analytics