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
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • 【正则表达式】最短匹配与最长匹配

NipGeihou
2019-01-24
正则表达式

【正则表达式】最短匹配与最长匹配

在使用正则表达式匹配 HTML 源代码时,遇到这么一个问题

<td>[
    网络
]<spantitle="xxxx">xxxxx,...</span></td><!--<td>xxx/xxx--><!--/xxx--><!--</td>--><td>xxx</td><td>2019-01-1414: 36</td><td></td><td>

我想匹配的结果是:

<td>[
    网络
]<spantitle="xxxx">xxxxx,...</span></td>

正则表达式 <td>\[\s*网络\s*\].+</td>

得到的结果却是:

<td>[
    网络
]<spantitle="xxxx">xxxxx,...</span></td><!--<td>xxx/xxx--><!--/xxx--><!--</td>--><td>xxx</td><td>2019-01-1414: 36</td><td></td>

解决办法很简单,只需要 .* 后面加 ? ,也就是 <td>\[\s*网络\s*\].+?</td>

<td>[
    网络
]<spantitle="xxxx">xxxxx,...</span></td>

*、+ 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。

参考文章:

Python 正则表达式尽可能小的匹配(遇到第一个结束字符串就停止匹配)- 昊天 SEO (opens new window)

正则表达式的最短与最长匹配 - 关于代码的那点事儿... - CSDN 博客 (opens new window)

正则表达式 – 语法 | 菜鸟教程 (opens new window)

#正则表达式
上次更新: 2022/01/05, 22:36:44
最近更新
01
元器件
05-23
02
iSCSI服务搭建
05-10
03
磁盘管理与文件系统
05-02
更多文章>
Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式