暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

正则表达式

我们不秃头 2021-08-12
292

什么是正则表达式

  • 一套匹配字符串的规则

能做什么

  • 检查一个输入的字符串是否合法 「web开发项目 表单验证」
    • 用户输入一个内容的时候,我们要提前做检测
    • 能够提高程序的效率并且减轻服务器的压力
  • 从一个大文件中找到所有符合规则的内容 「日志分析、爬虫」
    • 能够高效的从一大段文字中快速找到符合规则的内容

正则规则

  • 所有的字符就可以刚好匹配到字符串中的内容

  • 字符组:描述的是一个位置上能出现的所有可能性

  • 接受范围,可以描述多个范围,连着写就可以了

  • [abc] 一个中括号只表示一个字符位置。示例只匹配a或者b或者c。

    • 匹配单个数字:[0-9]
    • 匹配小写字母:[a-z]
    • 匹配大写字母:[A-Z]
    • 匹配一个大写或小写字母:[a-zA-Z]
    • 匹配一个数字或小写字母:[0-9a-z]
    • 匹配一个数字或者字母: [0-9a-zA-Z]
  • 在正则表达式中能够帮助我们表示匹配的内容的符号都是正则中的元字符

    元字符描述
    []匹配指定范围内的任意字符
    [^]非字符组
    \d匹配一个数字字符
    \w匹配字母、数字、下划线
    \s匹配任何空白字符,包括空格、制表符、换页符等等
    \t匹配一个制表符
    \n匹配一个换行符
    \W非字母数字下划线 一个字符
    \D非数字 一个字符
    \S非空白 一个字符
    [\d\D]表示匹配所有
    [\w\W]表示匹配所有
    [\s\S]表示匹配所有
    .匹配除了换行符以外的所有 一个字符
    [^\d]匹配所有的非数字 一个字符
    ^匹配一个字符串的开始
    $匹配一个字符串的结尾
    a表达式|b表达式匹配a或者b表达式中的内容,如果匹配a成功了,不会继续和b匹配(如果两个规则又重叠部分,总是把长的放在前面)
    ()约束括号中|描述的内容范围    www.(jd|taobao).com  能匹配 www.jd.com  和 www.taobao.com
  • 字符组和元字符对应关系

    字符组元字符描述
    [0-9]\d表示匹配一位任意的数字  digit
    [0-9a-zA-Z_]\w表示匹配数字、大小写字母、下划线  word
    空格"空格"
    tab\t
    enter回车\n
    空格,tab和回车\s表示所有空白  包括空格  tab  回车
  • 量词

    元字符描述
    {n}表示匹配n次
    {n,}表示匹配至少n次
    {n,m}表示匹配至少n次,至多m次
    表示匹配0次或1次
    +表示匹配1次或多次
    *表示匹配0次或多次

贪婪匹配

  • 在量词允许的情况下,尽量夺得匹配内容

  • .*x 表示匹配任意字符  任意多次数  遇到最后一个x才停下来(通过回溯算法实现)

非贪婪匹配   惰性匹配

  • .*?x 表示匹配任意字符  任意多次数  但是一旦遇到x就停下来
  • .+?x 表示匹配任意字符  至少1次  但是一旦遇到x就停下来

转义符

  • 原本有特殊意义的字符,到了表达它本身的意义的时候,在这个字符前面加 \ 进行转义(有一些有特殊意义的内容,放在字符组中,回取消它的特殊意义)
    • [().*+?]  所有的内容在字符组中会取消它的特殊意义
    • [a-c]    「-」 在字符组中表示范围,如果不希望它表示范围,需要转义,或者放在字符组的最前面或最后面

示例

  • 整数:\d+
  • 小数:\d+.\d+
  • 整数或小数:\d+.?\d*
  • 分组的作用:\d+(.\d+)?
  • 手机号码
    • 1[3-9]\d{9}
    • ^1[3-9]\d{9}$
    • 1[3-9]\d{9}
  • 18/15位的身份证号
    • ^[1-9]\d{14}(\d{2}([0-9]|x))?$
    • ^[1-9]\d{14}(\d{2}[\dx])?$
    • ^[1-9]\d{14}(\d{2}[0-9x])?$
    • ^([1-9]\d{16}[\dx]|[1-9]\d{14})$


文章转载自我们不秃头,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论