问题标签 [non-greedy]

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 投票
5 回答
9998 浏览

regex - 正则表达式 nongreedy 是 greedy

我有以下文字

根据我正在阅读的这本书,当?在任何量词之后跟随时,它变得非贪婪。

我的正则表达式to*?n仍在返回tooooooooooooon

它应该返回ton不应该吗?

知道为什么吗?

0 投票
2 回答
8179 浏览

javascript - 有没有办法在 JavaScript 中对正则表达式使用不贪婪的匹配?

我想知道是否有办法在 JavaScript 中使用不贪婪的匹配?我尝试了 U 修改器,但它似乎不起作用。

我想用 JavaScript 编写一个小的 BBCode 解析器,但是如果没有不贪婪的匹配,就不可能(至少在我看来)做这样的事情:

但是这样的替换会很好,因为那时不需要检查 HTML 的有效性。未封闭的标记将保持简单的文本。

0 投票
6 回答
1344 浏览

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

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

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

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

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

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

0 投票
3 回答
1691 浏览

linux - 如何用脚本进行多行搜索和替换?

我正在尝试替换 Python 源文件中的每个多行导入。所以,源代码就像

我想得到类似的东西

我尝试使用 sed,但它看起来不支持右括号的非贪婪匹配,所以它“吃掉”第二个导入.. :(
任何提示?这对 sed 来说是不可能的吗?我应该尝试使用其他工具吗?

0 投票
3 回答
4723 浏览

php - 正则表达式查找和替换 HTML 注释标签的内容

我有一个 CMS,它使用基于 HTML 注释的语法让用户插入 Flash 视频播放器、幻灯片和其他用户无法轻松编写的“硬”代码。

一部 FLV 电影的语法如下所示: <!--PLAYER=filename.flv-->

我使用这段代码:

$find_players = preg_match("/<!--PLAYER\=(.*)-->/si", $html_content, $match);

如果只有一个玩家,这很好用, $match[1] 包含文件名(这就是我所需要的)

我对正则表达式的了解正在消失,因此我无法对其进行调整以获取多个匹配项。

如果页面上还有更多,它会完全中断,因为它太贪婪地匹配(从第一个<!--PLAYER到最后一个-->

0 投票
3 回答
3945 浏览

php - php非贪婪正则表达式问题

演示:

我希望这个小程序输出的是“bcs >Hello”,但实际上它只是“bcs”

我的模式有什么问题?

0 投票
4 回答
494 浏览

algorithm - 超越贪心算法的有效方法是什么

这个问题的领域是在受限硬件上调度操作。结果的分辨率是时间表适合的时钟周期数。搜索空间增长非常迅速,早期的决策限制了未来的决策,并且可能的调度总数快速且呈指数增长。许多可能的调度是等价的,因为仅仅交换两条指令的顺序通常会导致相同的时序约束。

基本上,问题是在不花费太多时间的情况下探索广阔的搜索空间的好策略是什么。我希望只搜索一小部分,但希望在这样做的同时探索搜索空间的不同部分。

当前的贪心算法有时会在早期做出愚蠢的决定,并且分支定界的尝试速度非常慢。

编辑:想要指出结果是非常二元的,可能贪心算法最终使用 8 个周期,而存在使用分支定界仅使用 7 个周期的解决方案。

第二点是指令之间的数据路由和指令之间的依赖关系有很大的限制,这限制了解决方案之间的通用性。将其视为具有大量排序约束的背包问题以及由于路由拥塞而完全失败的一些解决方案。

澄清:在每个循环中,每种类型的操作数量都有限制,并且某些操作有两种可能的类型。有一组路由约束可以变化为相当严格或相当宽容,并且限制取决于路由拥塞。

0 投票
3 回答
8306 浏览

regex - 如何进行非贪婪的多个lookbehind匹配

RegEx2 的期望结果只是 <content2> 但它显然是贪婪的。如何使 RegEx2 不贪婪并仅使用最后一个匹配的lookbehind?

[我希望我已经从 NoteTab 语法正确地翻译了这个。我不做太多正则表达式编码。<prefix>、<content> 和 <suffix> 术语只是用来表示任意字符串。只有“?<=”lookbehind 命令中的“<”才有意义。]

我怀疑这很简单,但经过太多小时的搜索,我放弃了自己解决它。

谢谢您的帮助

艺术

0 投票
4 回答
2181 浏览

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

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

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

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

我已经检查过了

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

有没有这样的图书馆?

谢谢, 翁德拉

0 投票
4 回答
5483 浏览

regex - 为什么我的非贪婪 Perl 正则表达式仍然匹配太多?

说,我有一行包含以下字符串:

我想提取

我有以下代码:

但它给了我比我需要的更多:

我尝试使用非捕获括号将我的模式作为一个整体进行分组:

但问题仍然存在。

我已经重读了 Learning Perl 的 Nongreedy Quantifiers 部分,但到目前为止它让我无处可去。

感谢您慷慨提供的任何指导:)