NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • 【学习笔记】正则表达式

    • 常见匹配规则
      • 限定符
        • 常用正则表达式
          • 匹配前后包含或不包含XX
            • (?:pattern)
            • (?=pattern)
            • (?!pattern)
            • (?<=pattern)
            • (?<!pattern)
          • 扩展:VS Code替换
            • 参考文章
            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”。这个地方不正确,有问题

            # 扩展:VS Code 替换

            查找: (\d{3}) (.*)

            替换: $2-$1 (每个括号内匹配值的为一个变量,索引从 1 开始)

            # 参考文章

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

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

            #学习#正则#Regex
            上次更新: 2024/06/29, 09:56:49
            最近更新
            01
            Docker Swarm
            04-18
            02
            安全隧道 - gost
            04-17
            03
            Solana最佳实践
            04-16
            更多文章>
            Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
            • 跟随系统
            • 浅色模式
            • 深色模式
            • 阅读模式