`

正则表达式学习的故事

阅读更多

        做为程序猿,我们肯定或多或少的使用过正则表达式。
这时候你可能去网上拷贝一段代码,像验证邮箱,验证网址,验证只包含数字或
字母的密码等,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  
楼主加油!

相关推荐

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

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

    JavaScript编程精解

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

    java实现验证码功能源码-Lets-Study:来学习吧

    java实现验证码功能源码来学习吧 这是一个收集文章和文件的空间,只有我才能阅读。...正则表达式 词汇表 公用事业 生成文件 网络 协议、标准、指南 规范(RFC、ISO 标准) HTTP CORS HTTP API 休息

    pdf_order_parser:从PDF读取订单数据,将其作为哈希返回

    我按以下顺序找到了以下内容: [ pdf-reader gem] [pdf阅读器] [ pdf-reader-turtletext gem] [pdf-reader-turtletext],是pdf-reader的扩展,它允许您通过正则表达式和其他一些约束来指定PDF中的边界框区域以提取...

    word-extractor:从英文文本中提取单词,并为其提供定义和翻译

    这个怎么运作用户上传文件或粘贴要处理的文本(也可以是字幕文件),然后单击“发送” 客户端JavaScrips处理文本,使用正则表达式提取每个单词,并使用lemmatizer查找其不定式形式如果用户已登录,则过滤单词以不...

    sharkstattack

    在名为clean.ipynb的文件中至少使用5种数据清理技术空值,列删除,重复数据,字符串处理,应用fn,分类,正则表达式等。 在名为analysis.ipynb的文件中显示可根据您的假设来验证结论的analysis.ipynb 根据您的...

    SEO编程PHP中文版

    3.4.3 介绍正则表达式 3.4.4 URL重写与PHP 3.4.5 将带两个参数的URL进行重写数字化 3.4.6 重写多关键词URL地址 3.4.7 建立链接工厂 3.4.8 分页与URL重写 3.4.9 重写图像和流媒体 3.5 重写没有解决的问题 3.6...

    搜索引擎优化高级编程(PHP版)

    3.4.3 介绍正则表达式 3.4.4 URL重写与PHP 3.4.5 将带两个参数的URL进行重写数字化 3.4.6 重写多关键词URL地址 3.4.7 建立链接工厂 3.4.8 分页与URL重写 3.4.9 重写图像和流媒体 3.5 重写没有解决的问题 3.6 最后的...

    asp.net知识库

    ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则表达式 delegate vs. event 我是谁?[C#] 表达式计算引擎 正式发布表达式计算引擎WfcExp V0.9(附源码) 运算表达式类的原理及其实现 #实现的18位身份证...

Global site tag (gtag.js) - Google Analytics