首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的霸王龙要这么做?

为什么我的霸王龙要这么做?
EN

Stack Overflow用户
提问于 2016-07-24 06:35:06
回答 2查看 60关注 0票数 4

考虑以下案文:

代码语言:javascript
复制
foo:·····¶
·bar x··¶
·lorem ipsum····¶
dolorsitamet···¶
···¶   
consectetur adipiscing elit:

中间点表示空格,表示换行符。

regex (?:foo:\s*)(.+)(?:\n\s*)匹配空格行上的三个空格,但regex (?:foo:\s*)(.+)(?:\n\s+)匹配到dolorsitamet后面的换行符,但不包括换行符。为什么*角色不贪婪?人们会期望第三组(?:\n\s*)匹配。

代码语言:javascript
复制
¶
···¶`

我的regex模式是多行的,多特。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-24 06:52:10

贪婪的本性不是这里的问题。问题是当您使用:

代码语言:javascript
复制
\n\s*

由于.+在此之前是贪婪的,所以\n\s*在输入文本中匹配最后一个\n,即(last-1)th行(即用3空格行)并停止。

RegEx演示1

但是,当您使用

代码语言:javascript
复制
\n\s+

由于量词+的存在,在+之后需要至少一个空格,因此不能匹配(last-1)th行中的\n (因为最后一行在开始时没有任何空格)。因此,它与以dolorsitamet开头的行中的\n匹配,因为下一行开始时有空格。

RegEx演示2

票数 1
EN

Stack Overflow用户

发布于 2016-07-24 06:46:24

它确实有贪婪的行为。但是,为了在末尾匹配\n\s+,需要匹配换行符和至少一个空格字符。在这种情况下,这是下一个到最后一个换行符,三个空格,最后一个换行符。

如果它不停止,.+将捕获更多,但最后一部分将不匹配,regex引擎将寻找一个不那么贪婪的解决方案,这就是它所发现的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38549421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档