首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex:贪婪匹配某些模式~-11或~6等?

Regex:贪婪匹配某些模式~-11或~6等?
EN

Stack Overflow用户
提问于 2017-06-16 08:02:41
回答 1查看 35关注 0票数 1

我有一些带有以下模式的文本

,还有可选的a-然后一些数字

所以我可以拥有(可以是一些更大的文本的一部分)

代码语言:javascript
复制
~7
~-6
~-11534
~-0

例如,我的文本可以是:

代码语言:javascript
复制
New Zealand~1 expenditure~-900 

现在,我正在使用以下模式:

代码语言:javascript
复制
[~-]*[0-9]*[0-9]

它似乎做了工作,但我知道0-9*0-9是贪婪匹配(0到无限次)

我想知道是否有更好的模式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-16 08:05:41

编辑:实际上,为了更好地满足您的需求,我建议

代码语言:javascript
复制
~-?[0-9]+

通过这种方式,我们指定~是必需的,并且它后面可以是-和数字。

量词后面的问号表示尽量少取,使它不贪婪,但在目前的例子中,它是不必要的。

编辑2:我最近注意到,这些数字并不完全是可选的,并将‘0或多个’量词*改为‘一个或多个’量词+

编辑3:谈论“贪婪”和“非贪婪”。一个非贪婪的算法会尽可能少地返回,并且在字符串末尾有多个数字的情况下,它只会包含第一个结果,这不是您想要的结果。

更多关于贪婪和非贪婪的算法,这要感谢Wiktor Stribiżew出色的解释:

模式末尾的惰性量词将匹配0(如果*?或1(如果+?(使用)字符。这是因为被延迟量化的模式只获取它们必须首先匹配的内容(最少出现的次数),并被跳过,以便检查后续的模式。只有在没有匹配的情况下,引擎才会返回到懒惰量化的子模式,再扩展一个字符,然后重试。

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

https://stackoverflow.com/questions/44583982

复制
相关文章

相似问题

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