NipGeihou's blog NipGeihou's blog
  • 开发规范
  • 进阶笔记
  • 微服务
  • 快速开始
  • 设计模式
  • NoSQL 数据库

    • Redis
  • 数据结构与算法
  • 计算机网络
烹饪
关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • 开发规范
  • 进阶笔记
  • 微服务
  • 快速开始
  • 设计模式
  • NoSQL 数据库

    • Redis
  • 数据结构与算法
  • 计算机网络
烹饪
关于
  • 分类
  • 标签
  • 归档
  • 【学习笔记】正则表达式

    • 常见匹配规则
      • 限定符
        • 常用正则表达式
          • 匹配前后包含或不包含XX
            • (?:pattern)
            • (?=pattern)
            • (?!pattern)
            • (?<=pattern)
            • (?<!pattern)
        NipGeihou
        2019-01-23
        学习
        目录

        【学习笔记】正则表达式

        中文:正则表达式

        英文:Regular Expression,Regex,Regexp

        # 常见匹配规则

        参考网站:菜鸟教程 (opens new window)

        字符语法 说明
        \d 匹配一个数字字符。等价于 [0-9]。grep 要加上 - P,perl 正则支持
        \D 匹配一个非数字字符。等价于 [^0-9]。grep 要加上 - P,perl 正则支持
        \f 匹配一个换页符。等价于 \x0c 和 \cL。
        \n 匹配一个换行符。等价于 \x0a 和 \cJ。
        \r 匹配一个回车符。等价于 \x0d 和 \cM。
        \s 匹配任何不可见字符,包括空格、制表符、换页符等等。等价于 [\f\n\r\t\v]。
        \S 匹配任何可见字符。等价于 [^ \f\n\r\t\v]。
        . 匹配任何字符
        [...] 匹配括号中的任何字符,如 [abc]
        ^ 匹配输入字行首。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 “\n” 或 “\r” 之后的位置。
        $ 匹配输入行尾。如果设置了 RegExp 对象的 Multiline 属性,$ 也匹配 “\n” 或 “\r” 之前的位置。
        \w 匹配包括下划线的任何单词字符。类似但不等价于 “[A-Za-z0-9_]”,这里的 "单词" 字符使用 Unicode 字符集。
        \W 匹配任何非单词字符。等价于 “[^A-Za-z0-9_]”。
        \b 匹配一个单词的边界,也就是指单词和空格间的位置(即正则表达式的 “匹配” 有两种概念,一种是匹配字符,一种是匹配位置,这里的 \b 就是匹配位置的)。例如,“er\b” 可以匹配 “never” 中的 “er”,但不能匹配 “verb” 中的 “er”;“\b1_” 可以匹配 “1_23” 中的 “1_”,但不能匹配 “21_3” 中的 “1_”。
        \B 匹配非单词边界。“er\B” 能匹配 “verb” 中的 “er”,但不能匹配 “never” 中的 “er”。

        # 限定符

        字符语法 说明
        $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 $。
        ( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 (和)。
        * 匹配前面的子表达式零次或多次 (0,+∞)。要匹配 * 字符,请使用 *。
        + 匹配前面的子表达式一次或多次 (1,+∞)。要匹配 + 字符,请使用 +。
        . 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 . 。
        ? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配?字符,请使用?。
        [ 标记一个中括号表达式的开始。要匹配 [,请使用 [。
        \ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\' 匹配 "",而 '(' 则匹配"("。
        ^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 ^。

        # 常用正则表达式

        iPv4: ^((25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)$

        URL: [a-zA-z]+://[^\s]*

        # 匹配前后包含或不包含 XX

        • (?<!7) centos 查找 centos,而前面又不含 7 的

        • (?<=7) centos 查找 centos,且前面含 7 的

        • centos (?!7) 查找 centos,且后面不含 7 的

        • centos (?=7) 查找 centos,且后面含 7 的

        # (?:pattern)

        非获取匹配,匹配 pattern 但不获取匹配结果,不进行存储供以后使用。这在使用或字符 “(|)” 来组合一个模式的各个部分是很有用。例如 “industr (?:y|ies)” 就是一个比 “industry|industries” 更简略的表达式。

        # (?=pattern)

        非获取匹配,正向肯定预查,在任何匹配 pattern 的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如,“Windows (?=95|98|NT|2000)” 能匹配 “Windows2000” 中的 “Windows”,但不能匹配 “Windows3.1” 中的 “Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

        # (?!pattern)

        非获取匹配,正向否定预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如 “Windows (?!95|98|NT|2000)” 能匹配 “Windows3.1” 中的 “Windows”,但不能匹配 “Windows2000” 中的 “Windows”。

        # (?<=pattern)

        非获取匹配,反向肯定预查,与正向肯定预查类似,只是方向相反。例如,“(?<=95|98|NT|2000) Windows” 能匹配 “2000Windows” 中的 “Windows”,但不能匹配 “3.1Windows” 中的 “Windows”。

        # (?<!pattern)

        非获取匹配,反向否定预查,与正向否定预查类似,只是方向相反。例如 “(?<!95|98|NT|2000) Windows” 能匹配 “3.1Windows” 中的 “Windows”,但不能匹配 “2000Windows” 中的 “Windows”。这个地方不正确,有问题

        参考文章:

        正则表达式前后包含或者不包含匹配 (opens new window)

        正则?<= 和?= 用法 - whaozl - 博客园 (opens new window)

        #学习#正则#Regex
        上次更新: 2023/09/25, 02:31:10
        最近更新
        01
        Coding最佳实践
        09-24
        02
        PVE安装Windows11
        09-21
        03
        Mybatis-plus使用JSON类型
        09-21
        更多文章>
        Theme by Vdoing | Copyright © 2018-2023 NipGeihou | 友情链接
        • 跟随系统
        • 浅色模式
        • 深色模式
        • 阅读模式