最近有在研究爬虫方面的知识,但是在一些字符串匹配方面烦了愁。早些就了解到了正则表达式的神器,一致忙于其他事情,没有时间系统的学习正则表达式的知识,趁着这个机会,学习总结一下,如有理解不到的地方,请大家多多指点

基础知识

"^" :^会匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置。


"$"  :$会匹配行或字符串的结尾


"\b" :不会消耗任何字符只匹配一个位置,常用于匹配单词边界 如 我想从字符串中"This is Regex"匹配单独的单词 "is" 正则就要写成 "\bis\b"  
            \b 不会匹配is 两边的字符,但它会识别is 两边是否为单词的边界

"\d": 匹配数字,
         例如要匹配一个固定格式的电话号码以0开头前4位后7位,如0737-5686123  正则:^0\d\d\d-\d\d\d\d\d\d\d$ 这里只是为了介绍"\d"字符,实际上有更好的写法会在     下面介绍。

"\w":匹配字母,数字,下划线.
    例如我要匹配"a2345BCD__TTz" 正则:"\w+"  这里的"+"字符为一个量词指重复的次数,稍后会详细介绍。

"\s":匹配空格
    例如字符 "a b c" 正则:"\w\s\w\s\w"  一个字符后跟一个空格,如有字符间有多个空格直接把"\s" 写成 "\s+" 让空格重复

".":匹配除了换行符以外的任何字符
   这个算是"\w"的加强版了"\w"不能匹配 空格 如果把字符串加上空格用"\w"就受限了,看下用 "."是如何匹配字符"a23 4 5 B C D__TTz"  正则:".+"

"[abc]": 字符组  匹配包含括号内元素的字符
        这个比较简单了只匹配括号内存在的字符,还可以写成[a-z]匹配a至z的所以字母就等于可以用来控制只能输入英文了



反义

"\W"   匹配任意不是字母,数字,下划线 的字符

"\S"   匹配任意不是空白符的字符

"\D"  匹配任意非数字的字符

"\B"  匹配不是单词开头或结束的位置

"[^abc]"  匹配除了abc以外的任意字符



量词


"*"(贪婪)   重复零次或更多
     例如"aaaaaaaa" 匹配字符串中所有的a  正则: "a*"   会出到所有的字符"a"

"+"(懒惰)   重复一次或更多次
       例如"aaaaaaaa" 匹配字符串中所有的a  正则: "a+"  会取到字符中所有的a字符,  "a+"与"a*"不同在于"+"至少是一次而"*" 可以是0次,

"?"(占有)   重复零次或一次
       例如"aaaaaaaa" 匹配字符串中的a 正则 : "a?" 只会匹配一次,也就是结果只是单个字符a

"{n}"  重复n次
       例如从"aaaaaaaa" 匹配字符串的a 并重复3次 正则:  "a{3}"  结果就是取到3个a字符  "aaa";

"{n,m}"  重复n到m次
       例如正则 "a{3,4}" 将a重复匹配3次或者4次 所以供匹配的字符可以是三个"aaa"也可以是四个"aaaa" 正则都可以匹配到

"{n,}"  重复n次或更多次
       与{n,m}不同之处就在于匹配的次数将没有上限,但至少要重复n次 如 正则"a{3,}" a至少要重复3次


懒惰限定符


"*?"   重复任意次,但尽可能少重复
      如 "acbacb"  正则  "a.*?b" 只会取到第一个"acb" 原本可以全部取到但加了限定符后,只会匹配尽可能少的字符 ,而"acbacb"最少字符的结果就是"acb"

"+?"  重复1次或更多次,但尽可能少重复
     与上面一样,只是至少要重复1次

"??"  重复0次或1次,但尽可能少重复
      如 "aaacb" 正则 "a.??b" 只会取到最后的三个字符"acb"

"{n,m}?"  重复n到m次,但尽可能少重复
          如 "aaaaaaaa"  正则 "a{0,m}" 因为最少是0次所以取到结果为空

"{n,}?"    重复n次以上,但尽可能少重复
          如 "aaaaaaa"  正则 "a{1,}" 最少是1次所以取到结果为 "a"