美文网首页
正则表达式学习(上)

正则表达式学习(上)

作者: 英勇青铜5 | 来源:发表于2016-12-24 23:19 被阅读259次

    学习资料:

    哈哈,购买链接,以后做书托 :)

    1. 开始,零碎知识点

    • 配合书练习的网站:Regex Pal

    • 匹配任意字符

    . 点:英文句号,一个通配符,可以匹配任意字符,但一些特殊情况下不能匹配行起始符,例如,U+000A,也可以匹配%或者|


    1.1 捕获分组和向后引用

    捕获分组,向后引用
    1. (\d):匹配第一个数字7,并将其捕获
    2. \d:匹配第二个数字0,但没有对其捕获
    3. \1:对捕获的数字进行方向引用,数字7

    将一个目标用()括起来,就创建捕获分组,\1则表示引用


    1.2 使用量词

    量词
    1. (:左圆括号,捕获分组的起始符
    2. \\: 反斜杠,字符组简写式的起始符,对之后的字符进行转义
    3. d:字符d,字符组的简写式的结束符,d,匹配[0-9]内任意数字
    4. {:左花括号,量词起始符
    5. 3:数字3,匹配目标字符个数的最小数量
    6. ,:逗号,分隔作用,这里分隔开不同的数量
    7. }:右花括号,量词结束符
    8. [:左方括号,字符组的起始符
    9. .:点号,匹配点号本身
    10. -:连接符,匹配本身
    11. ]:右方括号,字符组结束符
    12. ?:问号,表示量词,零个或者1个
    13. ):右圆括号,捕获分组的结束符
    14. +:加号,表示量词,一个或者多个

    整个表达式含义:括号里的模式出现一次或者多次,括号里的规则是匹配三位数字或者四位数字,后面跟一个点号或者连字符

    花括号包括的数字表示待查找的目标出现的次数。花括号是一种量词,本身用做元字符

    问号,是另一种量词,在上面的表达式中表示连字符是可选的,也就是说连字符-可以出现一次,也可以一次都不出现

    *星号,零个或者多个

    注意:上面的表达式虽然匹配了电话字符串,但并不完全正确,因为只是匹配了3位或者4位数字,而不管是否符合电话号码的格式

    改进:

    (\d{3}[.-]?){2}\d{4}
    

    改进后的含义:连续两个无括号3位数字后,每个3位数后面可以有连字符也可以没有,最后一个4位数字


    1.3 括选文字符

    无括号区号 有括号区号

    上面一个表达式,可以匹配两种形式的电话号码字符串,开始的3位数区号,可以带括号,也可以不带括号

    1. 开头的脱字符^或者中间位置的^,表示匹配出现在一行 起始位置的目标字符
    2. (:,捕获分组起始符
    3. \(:,表示括号(字符本身,\作为转义字符,(本身有捕获分组的起始符的含义,需要转义字符
    4. d{3}:,匹配3位数字
    5. \):,表示)自身,与第3条同理
    6. ** |:**,表示选择,可以从多个选项中选择一个。本例中就是匹配一个带括号或者不带扩号的区号
    7. 脱字符^:,匹配行起始位置
    8. ** \d{3}:**,匹配3位数字
    9. [.-]?:,匹配一个可选的.点号或者-连字符
    10. ):,右圆括号,捕获分组结束符
    11. ?:,表示之前的(\(\d{3}\)|^\d{3}[.-]?)整个分组,都是一个可选项,可有可无
    12. \d{3}:,匹配3位数字
    13. [.-]?:,匹配一个可选的.点号或者-连字符
    14. \d{4}:,匹配4位数字
    15. $:,匹配行结束位置

    以上正则表达式中的捕获分组并不是必需的。分组是必要的,但是捕获不需要。更好的方法是使用非捕获分组


    2. 简单的模式匹配

    2.1 零碎

    • \d:绝大多数情况下,都可以用来匹配阿拉伯数字
    • [0-9]:匹配数字,比\d更灵活,例如,[1-3],只匹配1,2,3这三个数字
    • \D:匹配非数字字符,包括空格、标点符号(引号、连字符、反斜杠、方括号)等字符;[^0-9],[^\d],同作用
    • \w:匹配字母,数字,下划线,在匹配英文字符组时,[_a-zA-Z0-9],同作用
    • \W:匹配空格、标点,其他非字母字符,非数字字符(包括中文),[^_a-zA-Z0-9],同作用,简写式就是[^\w]

    2.2 匹配空白字符

    \s匹配空白符
    • \s:匹配空白字符,[ \t\n\r] ,间括号内开始有空格,同作用

    可以匹配:

    1. 空格
    2. 制表符\t
    3. 换行符\n
    4. 回车符\r
    • \S:匹配非空白字符,包含中文字符,[^ \t\n\r],同作用

    2.3 匹配任意字符

    去掉global全局模式,用来得到匹配文本中第一个符合匹配项

    匹配 THE RIME

    .点号在绝大多数情况下,都可以匹配除了行结束符外的任意字符

    8个点,可以用.{8}来代替


    特执性匹配ANCYENT

    这个表达性具有很强的 特指性specificity,只要是A*****T这样形式的单词就符合条件

    1. \b:简写式匹配单词边界,不消耗任何的字符
    2. A,T:限定单词首尾字母
    3. .{5}:匹配任意5个字符
    4. \b:结束边界

    匹配换行符前的字符

    .*匹配零个或者多个字符,在取消global模式下,匹配换行符前的字符,也就是只匹配第一行的字符,.+[^\n]或者[^\n\r],同作用。在global模式下,.+[^\n]或者[^\n\r]则匹配全部的字符

    若发现不正常匹配的,将文本时的格式整理整理,删除文本中间的复制时,带的多余无用的回车符


    3. 边界

    断言标记边界,但并不消耗字符,字符并不会返回到结果中。断言也被称为零度宽断言zero-width assertion。零度宽断言不匹配字符,而是匹配字符串中的位置。其中,^$也叫做锚位符anchor

    本章节主要学习:

    • 行或者字符串的起始和结束位置
    • 单词的边界(两种)

    3.1 行的起始和结束

    脱字符^:匹配行或者字符的起始。根据上下文,^会匹配行或者字符串的起始位置,也可以匹配整个文档的起始位置

    $匹配行或者字符串结束位置

    multiline模式:多行,勾选后,整个目标文件被视为一个字符串

    匹配How开头Country结束的字符串

    ^How.*Country\.$:匹配How开头的整行。\反斜杠的是做转义字符,对.点号进行转义,点号被解释为字面值,也就是点号本身,而不是匹配任意字符

    如果不勾选mutiline模式,则不能匹配到图中的高亮部分,表达式无效


    3.2 单词边界与非单词边界

    匹配THE

    \bTHE\b:在勾选global模式下,第一行两个THE都会匹配

    就像^$一样,\b是个零度宽断言,表面上会匹配空格或者是行起始,而实际上它匹配的是个零宽度的不存在的东西。第2个THE的两边的空格并没有标亮,并不会被匹配到

    读了2遍,也不是很明白


    匹配单词首尾外位置的e

    \B:非单词边界,匹配单词首尾之外位置,例如单词或者字符串中间位置出现的字母或数字

    图中有个很典型的便是倒数第2行的eye,没有高亮


    4. 最后

    哈哈,单身狗,平安夜,学习知识

    正则的知识点,好零碎,需要多看多练习。书一共9章,就打算一篇博客记录3章学习的知识点

    本人很菜,有错误请指出

    共勉 :)

    相关文章

      网友评论

          本文标题:正则表达式学习(上)

          本文链接:https://www.haomeiwen.com/subject/ocalvttx.html