正则表达式
博客专区 > liuzhihe 的博客 > 博客详情
正则表达式
liuzhihe 发表于1年前
正则表达式
  • 发表于 1年前
  • 阅读 4
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

1:什么事正则表达式

    正则表达式是一种特殊的字符串模式,用于匹配一组字符串

2:正则表达式简单介绍

    2.1:元字符介绍

        "^" :^会匹配行或者字符串起始位置

        “$”:$会匹配行或者字符串的结尾位置

        "\b":常用与匹配单词的边界不会消耗(代表)任何字符“This is Reg” 正则\bis\b会匹配到is不会匹配两边的空格       

        " \d":匹配数字

        "\w":匹配字母,数字,下划线

        "\s":匹配空格

        ".":匹配除换行符以外的任何字符

        "[]":自定义匹配元素集合,将匹配[]里面定义的元素集合,如[abc]表示匹配 a或b或c,[a-z]表示匹配a-z的字母

    2.2反义匹配

        将小写换为大写刚好意思表示相反

        “\D”:表示匹配非数字的字符

        “\W”:表示匹配非字母数字下划线字符

        “\S”:表示匹配费空格的字符

        “\B”:表示匹配非单词开头和结尾的者位置

        “[^]”:表示匹配非自定义元素的字符 如:[^abc]表示匹配不是a或b或c的任意字符

    2.3懒惰次数限定符

        “*”:表示前一字符重复零次或者多次及前一字符出现>=0次

        “+”:表示前一字符重复一次或者多次及前一字符出现>=1次

        “?”:表示前一字符出现零次或者一次

        "{n}":表示前一字符出现n次

        “{n,m}:”表示前一字符出现n到m次

        “{n,}”:表示前一字符出现n次或以上

    2.4 贪婪

        贪婪贪心如*会首先匹配整个字符串,尝试匹配时会选定尽可能多的内容,如果失败会回退一个字符,直到匹配到内容或者没有字符可以回退

  如:a*b匹配字符串ahjhjhbjkjkjkjkjajkjkjkjbkjkjkjkjkjkjauiuiuiuijjkhb 匹配结果为ahjhjhbjkjkjkjkjajkjkjkjbkjkjkjkjkjkjauiuiuiuijjkhb而不是ahjhjhb  ajkjkjkjb  auiuiuiuijjkhb三个结果原因就在于正则匹配为懒惰模式 如果相匹配出来三个结果方法见2.5懒惰限定符或者后面的模式修正符

    2.5懒惰限定符

        “*?”:重复人依稀但每次尽可能的少

        如“”a*b匹配字符串ahjhjhbjkjkjkjkjajkjkjkjbkjkjkjkjkjkjauiuiuiuijjkhb 匹配结果为ahjhjhb  ajkjkjkjb  auiuiuiuijjkhb三个

        “+?”:复1次或更多次,但尽可能少重复使用结果同“*?”

        "??"  重复0次或1次,但尽可能少重复

        如正则a.??b匹配aaaacb结果为acb

        "{n,m}?"  重复n到m次,但尽可能少重复

        如正则a{1,5}?匹配aaaaaa结果为空

        "{n,}?"    重复n次以上,但尽可能少重复

        如:a{1,}?匹配aaaaaaa结果为7个a

    2.6捕获分组

        捕获分组的概念:捕获分组就是一个括号内的内容,“(\d)而"(\d)" 这就是一个捕获分组,可以对捕获分组进行 后向引用 (如果后而有相同的内容则可以直接引用前面定义的捕获组,以简化表达式)如(\d)\d\1 这里的"\1"就是对"(\d)"的后向引用那捕获分组有什么用呢看个例子就知道了。

        如:“hello hello” 正则 \b(\w+)\b\s\1\b 所以这里的"\1"所捕获到的字符是(\w+)匹配的结果"hello" 匹配结果为hello hello  若匹配“hello hell1”则匹配不成功

     “\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的位置

        "(?<!)":匹配前面不是exp的位置

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 19
码字总数 7413
×
liuzhihe
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: