正则表达式之贪婪匹配和懒惰匹配

例子:匹配 HTML 标签

贪婪匹配: <.+>
在这里插入图片描述

懒惰匹配: <.+?>
在这里插入图片描述
我们发现第二种 懒惰匹配才是我们想要的结果

字符" ? " : 如果紧跟在任何量词 *、 +、? 或 {} 的后面,将会使量词变为非贪婪(懒惰匹配,匹配尽量少的字符),和缺省使用的贪婪模式(匹配尽可能多的字符)正好相反。例如,对 “123abc” 使用 /\d+/ 将会匹配 “123”,而使用 /\d+?/ 则只会匹配到 “1”。

分析匹配 HTML 标签的例子:
贪婪匹配:<.+> 表示匹配 符号 “<” 和符号 ">"之间的任意字符,且任意字符数大于0 。因为是尽可能多的匹配,所以当匹配的时候发现整个标签 “ <div><span>我要匹配HTML标签</span></div> ”是符合要求的,所以就是匹配所有。

懒惰匹配:<.+?> 表示匹配 符号 “<” 和符号 ">"之间的任意字符,且任意字符数大于0 。因为是尽可能少的匹配,所以当匹配的时候发现标签 “ <div> ”已经是符合要求的,所以会匹配<div>标签,然后继续向下匹配,发现<span>标签也是符合要求的,继续向下匹配,发现文字不符合要求,继续向下,发现</span>和</div>标签都是符合要求的,所以最后会匹配 <div>, <span>, </span>, </div>四个标签

再看个例子: 字符串 abcdssaxd
贪婪匹配:<a.+d> 会匹配整个字符串
在这里插入图片描述
懒惰匹配:<a.+?d> 匹配 abcd 和 axd
在这里插入图片描述
懒惰匹配,匹配到满足条件的abcd就停止了此次匹配,不会干扰后面的继续匹配。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值