正则表达式

1.1什么是正则表达式
    正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,正则就是这个模具,定义一种规则去匹配符合规则的字符
2.1元字符介绍
    ^:会匹配长或者字符串的起始位置,有事还会匹配整个文档的其实位置
    $:匹配行或字符串的结尾
    \b:不会消耗任何字符只配匹一个位置,常用于匹配单词边界 ex: this is regex 匹配 is    \bis\b
    \d:匹配数字
    \w:匹配字母,数字,下划线
    \s:匹配空格
    .:匹配除了换行符以外的任何字符   \w的加强版
    []:字符组 匹配包含括号内元素的字符  ex1:[abc]   ex2:[a-z]
2.2反义
    \W: 匹配任意非字母,数字,下划线的字符
    \S: 匹配任意非空格字符
    \D:匹配任意非数字字符
    \B:匹配不是单词开头或结束的位置
    [^]:匹配非包含的元素字符   ex:[^abc] 匹配非abc的字符
2.3量词 用在元字符后
    贪婪(贪心) 贪婪量词会首先匹配整个字符串,尝试匹配时,他会选定尽可能多的内容,如果失败则回退一个字符,然后再次尝试回退的过程就叫做回溯,它每次回回退一个字符,知道匹配的内容或者没有字符可以回退,相比下面两种贪婪量词对资源的消耗最大
    懒惰(勉强) 懒惰量词从目标的起始位置开始尝试匹配,每次检查一个字符,寻找他要匹配的内容,如此循环到字符结尾
    占有 量词会覆盖整个目标字符串,然后尝试寻找匹配内容,但他只尝试一次,不会回溯,就好比先抓一把石头,然后从石头里挑出黄金
 
    *(贪婪)重复0次或更多 相当于{0,} ex:a*
    +(占有)重复一次或更多 相当于{1,} ex:a+
    ?(懒惰)重复0零次或一次 相当于{0,1}
    {n} 重复n次
    {n,m} 重复n到m次
    {n,} 重复n或更多次  ex:\d{2,}
2.4懒惰限定符
    *?:重复任意次,但尽可能的少重复 ex:acbacb 正则a.*?b 只会取到acb
    +?:重复一次或更多次,但尽可能的少重复
    ??:重复0次或一次,但尽可能的少重复
    {n,m}?:重复n到m次,但尽可能的少重复
    {n,}?:重复n次以上但尽可能的少重复
3.1捕获分组
    括号内的内容为捕获分组,如(\d)\d  (\d)就是一个捕获分组,可以对捕获分组进行后项引用(如果后面有相同的内容则可以直接引用前面定义的捕获组,以简化表达式)如(\d)\d\1这里的\1就是对(\d)的后向引用
    ex:zery zery 正则\b(\w+)\b\s\1\b这里的\1多捕获的字符与(\w+)一样是zery,为了让组名更具意义,组名可以自定义名字
    \b(?<name>\w+)\b\s\k<name>\b 用?<name>就可以定义组名了,\k<name>就可以反向引用了,自定义组名后,捕获组中匹配的值就会保存的定义的组里了
    捕获组常用
    (exp) 匹配exp,并捕获文本到自动命名的组里
    (?<name>exp)匹配exp,并捕获文本到name组里
    (?:exp)匹配exp,不捕获匹配的文本,也不分配组好。主要是用括号限制后面符号作用范围
    (?=exp)匹配exp前面的位置
    (?<=exp)匹配exp后面的位置
    (?!exp)匹配后面跟的不是exp的位置 ex:1234abc  \d{3}(?!\d)  234
    (?<!exp)匹配前面不是exp的位置
 
posted @ 2020-03-30 17:07  _蒲公英_  阅读(308)  评论(0编辑  收藏  举报