问题标签 [reluctant-quantifiers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
1344 浏览

regex - 正则表达式:懒惰更糟吗?

我一直写这样的正则表达式

但是我刚刚了解到这个懒惰的东西,我可以这样写

使用第二种方法有什么缺点吗?正则表达式肯定更紧凑(甚至 SO 也能更好地解析它)。

编辑:这里有两个最佳答案,指出表达式之间的两个重要区别。ysth 的回答指出了非贪婪/懒惰的弱点,其中超链接本身可能包含 A 标签的其他属性(绝对不好)。Rob Kennedy 指出了贪婪示例中的一个弱点,即锚文本不能包含其他标签(绝对不行,因为它也不会抓取所有锚文本)......所以答案是,正则表达式就是他们是,看似相同的惰性和非惰性解决方案可能在语义上并不等效。

编辑:第三个最佳答案是 Alan M 关于表达式的相对速度。暂时,我会将他标记为最佳答案,以便人们给他更多积分:)

0 投票
3 回答
199 浏览

regex - 对正则表达式感到困惑

我想匹配以表达式开头"${"和结尾"}"的表达式${foo} and ${bar}

当然,正则表达式.*\$\{.+\}.*匹配整个表达式。

我的理解是更改为不情愿的量词可以解决问题,但我发现它.*\$\{.+?\}.*也匹配整个表达式。

我错过了什么?

0 投票
4 回答
2181 浏览

java - Java 正则表达式:UNGREEDY 标志

我想移植一个通用的文本处理工具,Texy!,从 PHP 到 Java。

该工具使用preg_match_all("/.../U"). 所以我正在寻找一个有一些UNGREEDY标志的图书馆。

知道我可以使用该.*?语法,但确实有很多正则表达式我必须覆盖,并在每个更新版本中检查它们。

我已经检查过了

  • ORO - 似乎被遗弃了
  • 雅加达正则表达式 - 不支持
  • java.util.regex - 不支持

有没有这样的图书馆?

谢谢, 翁德拉

0 投票
1 回答
256 浏览

regex - 在正则表达式中,它被称为惰性还是非贪婪?

我最初听到它是不贪婪的。然后在“网络上”的引用中,我看到它被称为懒惰。它是哪一个?

0 投票
2 回答
497 浏览

regex - 为不使用惰性重复量词编写更好的正则表达式

我有一个正则表达式:

由于它使用惰性重复量词,因此对于较长的字符串(具有超过 500 个选项),它会回溯超过 100,000 次并失败。请帮我找到一个更好的不使用惰性重复量词的正则表达式

0 投票
1 回答
92 浏览

java - 我需要帮助使正则表达式正确

我正在尝试获取一个正则表达式来在一行上查找我的模式的多个条目。注意:我已经使用 Regex 大约一个小时了... =/

例如:

应该匹配两次:

我认为答案在于正确掌握贪婪、不情愿和占有欲,但我似乎无法让它发挥作用......

我想我很接近了,到目前为止我创建的正则表达式字符串是:

但是正则表达式匹配器返回 1 个匹配项,整个字符串......

我在下面的代码中有一个(可编译的)Java Regex 测试工具。这是我最近(徒劳的)尝试使用该程序来获得它,输出应该非常直观。

这是Java:

0 投票
2 回答
364 浏览

java - 用于不情愿匹配的java正则表达式

需要找到以下问题的表达式:

我想得到什么:"{ \"questionID\" :\"4\", \"question\":\"What is your favourite hobby?\",\"answer\" :\"*******\"},{ \"questionID\" :\"5\", \"question\" :\"What was the name of the first company you worked at?\",\"answer\" :\"******\"}";

我正在尝试什么:

我得到了什么:

由于贪婪的行为,第一组捕获了两个“答案”部分,而我希望它在找到足够的内容后停止,执行替换,然后继续寻找。

0 投票
2 回答
68 浏览

java - 勉强量词行为的原因??在java正则表达式中

我知道这?是一个贪婪的量词,并且??是不情愿的。当我按如下方式使用它时,它总是给我一个空输出?是因为它总是从左到右运行(首先查看零出现然后匹配出现)还是另一个?

输出 :

0 投票
2 回答
1800 浏览

php - 对大型正则表达式使用惰性求值(而不仅仅是 .*?)

使用以下正则表达式:

我得到以下结果(黄色框表示匹配):

崇高的文字 2

原始文本: http: //pastebin.com/vSi0mLGv

下面两段是正确的。我想要包含以下内容的所有部分:<<<NOTICE>>> Non-Prod Server: Using HTTP not HTTP/S

然而,顶部包含正确的字符串(类似于底部两个),但还带有我不想要的另一个块:

我知道这归结为正则表达式是贪婪的,但是<br />如果这甚至是正确的方法,我怎样才能让它对 进行懒惰的评估。我试过(<br />)*?了,其他人都无济于事。


其他信息:我正在使用Sublime Text 2,如果有人想重新创建图像,则执行正则表达式搜索。

0 投票
1 回答
2689 浏览

java - 在正则表达式中使用不情愿的量词

到目前为止,我还没有在正则表达式中使用不情愿的量词,我查看了该网站的一些问题以了解它的功能和用途。尽管类似的问题非常具有描述性,但我仍然无法理解它与java 教程中的示例有何关联。我知道不情愿的量词匹配尽可能少的情况。那么,它如何解释正则表达式

在一个字符串上

返回两个匹配项:"xfoo""xxxxxxfoo"

此外,由于所有格量词的解释也不充分,有人可以解释为什么正则表达式

在同一个字符串上什么都不匹配?