加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

我的正则表达式既懒惰又贪婪.为什么?

发布时间:2020-12-13 22:54:25 所属栏目:百科 来源:网络整理
导读:假设我在网页中搜索锚链接.有效的正则表达式是: "as+.*?" 但是,让我们添加一个复杂功能.让我们假设我只想要包含特定文本的链接,例如,单词“next”.通常情况下,我认为我所要做的就是: "as+.*?next" 但我现在发现,如果页面中有3个锚标签,而第三个锚标
假设我在网页中搜索锚链接.有效的正则表达式是:
"&;as+.*?&;"

但是,让我们添加一个复杂功能.让我们假设我只想要包含特定文本的链接,例如,单词“next”.通常情况下,我认为我所要做的就是:

"&;as+.*?&;next"

但我现在发现,如果页面中有3个锚标签,而第三个锚标签后面有“下一个”,那么正则表达式搜索会找到从第一个锚标签延伸的大字符串,并扩展到第三个锚标签.如果周期 – 星号 – 问号是找到所有字符,直到遇到“> next”,这是有道理的.但这不是我想要的.我希望找到所有字符,直到遇到“>”,然后另一个约束应该是在“>”之后.应该有“下一个”.

我如何让它工作?

你可以修改你的正则表达式,禁止它匹配>在标签内,即通过更换.使用[^>]:
"&;as+[^>]*?&;next"

.*?匹配任意数量的字符.你不情愿的事实并没有让它停在>:它继续匹配它,直到它在结束时找到>下一个.这并不贪心,因为表达式尽可能少地匹配以获得匹配.只是没有更短的比赛可用.

Demo.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读