《正则表达式必知必会》-- 个人认为最好的RE入门书籍

前端之家收集整理的这篇文章主要介绍了《正则表达式必知必会》-- 个人认为最好的RE入门书籍前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

《正则表达式必知必会》笔记

标签(空格分隔): 正则表达式 笔记 RE regular expression
说明
1)《正则表达式必知必会》是本人见过的最好的一本讲解正则表达式的书籍,很适合初学者,书很薄,稍微有一点RE基础的人,1-2个小时可以翻一遍;
2) 本文是针对书的简略总结,方便自己查阅和对他人RE基础知识的检测。
3) 如果认为自己了解RE,可以直接下面内容进行检测或回顾,若内容看不懂,建议直接看原书了,真的很薄的,能最快入手!!!


  1. 元字符:在RE中有特殊含义的字符。

    • 匹配文本,如.
      • 空白元字符,如[\b] \f \n \r \t \v 等 –> 回车换行(\r\n)
    • 语法要求,如[]

    元字符大写和小写一般表示相反的匹配

  2. 在字符集合中,一般的,像. +这样的元字符会被解释为普通字符,不需要被转义,但转义也可以。即[\w.]等同于[\w\.]

  3. 匹配的重复次数

    • *,?,+ –> 分别匹配字符(或字符集)零个一个或多个,零个或一个,一个或多个
    • {1,8},{3,},{3}
    • 过度匹配 (实际中注意使用”懒惰型”的)

      贪婪型元字符 懒惰型元字符
      * *?
      + +?
      {3,} {3,}?
  4. 位置匹配

    • \b 匹配单词边界,匹配一个位置,即一个\w\W之间的位置(字母、数字、下划线),如 \bhello\b

      注:些支持\< \> 这些分别匹配单词的开头和结尾

    • ^ $ 字符串匹配

    • 分行匹配模式(multiline mode)–>将行分隔符当作一个字符串分隔符对待–>(?m)必须出现在模式最前面

      注:有很多RE不支持这个

  5. 子表达式

    • 将子表达是当作一个独立元素使用

      • | RE里面的或操作符,如 (&nbsp;){2,(19|20)\d{2}

        注:&nbsp标识HTML文档中使用的非换行型空格,即non-breaking space

      • 可嵌套使用

    • 回溯引用(backreference)

      • 子表达可以在模式的内部被引用,即模式的后半部分可以引用前半部分定义的字表达式
      • 查找连续重复出现的单词 [ ]+(\w+)[ ]+\1

        注:回溯引用匹配通常是从1开始,\0表示匹配整个正则表达式;有的RE使用$或者支持名字捕获(named capture)

      • 常用在替换操作中,或将文本分为多个子表,进行排版优化

      • 用来进行大小写转换的元字符,如\E \l \L \u \U

        \l \u只能把下一个字符或子表达是转换为小大写,\L \U则和\E一起使用,作用于中间的字符

  6. 前后查找

    • lookahead & lookbehind, 即匹配但不cnsume
    • ?=?<= 必须放在子表达式开头,其中向前查找的长度可变,向后查找只能是固定的模式 <– 几乎所有的RE都遵守这一规则
    • 前后查找操作符,(?=) (?!) (?<=) (?<!) ,其中!标识负向查找 negative,如负向前查找。
    • 前后查找结合起来,如(?<=<[tT]>).*(?=\</[tT]>)
  7. 条件嵌入

    • 并非所有RE实现都支持条件处理
    • ?匹配一个字符或表达式,如果它存在则执行后面的

      • 回溯引用条件,语法 (?(backreference)true-regex),在backreference存在时,true-regex才被执行

        注:?(1)是可以的,这里不用反义,但?(\1)往往也是可以的。

      • 前后查找,只有在一个向前或向后查找取得成功的情况下才才允许一个表达式被使用。将回溯引用条件中的编号–>一个完整的前后查找表达式

        如:\d{5}(?(?=-)\d{4}) –> ?(?=-)仅起到一个判断的作用,不消费

  8. 常用软件

    • grep 参数-E -G -P分别表示支持扩展、基本和Perl正则表达式,-o -v -c分别表示只想查看匹配结果,对匹配操作进行求非,只显示匹配次数
    • Perl
      • m/pattern/ s/pattern/pattern/ qr/pattern split()
      • 限定符放在模式的后面,\i表示全局搜索\g表示全局搜
      • 回溯引用,$` 返回匹配字符串前面所有的东西,$` 返回最后一个被匹配的子表达式,$& 返回整个被匹配字符串:

猜你在找的正则表达式相关文章