问题标签 [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 投票
3 回答
40417 浏览

c# - C# 正则表达式中的贪婪、非贪婪、全贪婪匹配

如何获得以下示例中的所有匹配项:

PS:我想以通用方式进行所有匹配。上面的例子只是一个例子。

0 投票
4 回答
2043 浏览

php - PHP preg_replace 将 **xyz** 转为xyz

为了好玩,我决定做一些类似于降价的东西。凭借我过去在正则表达式方面的一些小经验,我知道它们是多么强大,所以它们将是我所需要的。

所以,如果我有这个字符串:

如何使用 preg_replace 将其转换为:

我假设这样的事情?

0 投票
2 回答
191 浏览

java - 如何访问文本块作为使用 ANTLR 中的 greedy=false 选项匹配的属性?

我的 ANTLR 语法中有这样的规则:

此规则仅匹配 c 样式的注释,因此它可以接受任何一对 /* 和 */ 以及介于两者之间的任意文本,并且它工作正常。

我现在要做的是在规则匹配时捕获 /* 和 */ 之间的所有文本,以使其可供操作访问。像这样的东西:

这种方法不起作用,在解析过程中它在到达“/ *”之后的第一个字符时给出“没有可行的选择”

我不太清楚是否/如何做到这一点 - 欢迎任何建议或指导,谢谢。

0 投票
1 回答
732 浏览

regex - sed 非贪婪匹配:匹配第一个 xml 节点

跟进这个问题

执行此命令以查找具有指定名称的所有 xml 节点,并将其作为变量传递。这里唯一的问题是匹配超出了初始</item>到下一个节点,最后到最后一个</item>

我如何使这个不贪婪?

0 投票
7 回答
167 浏览

python - 在python中对正则表达式进行去贪婪

我正在尝试编写一个正则表达式,它将完整路径文件名转换为给定文件类型的短文件名,减去文件扩展名。

例如,我试图从字符串中获取 .bar 文件的名称,使用

根据 Python re docs,*?是不贪婪的版本*,所以我期待得到

返回match.group(1)但我得到了

关于贪婪,我在这里错过了什么?

0 投票
6 回答
3896 浏览

python - 为什么最小(非贪婪)匹配受字符串字符“$”结尾的影响?

编辑:删除原始示例,因为它引发了辅助答案。还固定了标题。

问题是为什么正则表达式中“$”的存在会影响表达式的贪婪:

这是一个更简单的例子:

这 ”?” 似乎什么都不做。请注意,当“$”被删除时,“?” 受到尊重:

编辑:换句话说,“a+?$”匹配所有的 a 而不仅仅是最后一个,这不是我所期望的。这是正则表达式“+?”的描述 来自python 文档:“添加 '?' 在限定符使其以非贪婪或最小方式执行匹配之后;将匹配尽可能少的字符。"

在这个例子中似乎不是这样:字符串“a”匹配正则表达式“a+?$”,那么为什么字符串“baaaaaaa”上的相同正则表达式匹配不只是一个a(最右边一)?

0 投票
4 回答
1573 浏览

regex - Perl 非贪婪

我遇到了非贪婪正则表达式(正则表达式)的问题。我看到有关于非贪婪正则表达式的问题,但他们没有回答我的问题。

问题:我正在尝试匹配“lol”锚的href。

注意:我知道这可以通过 Perl HTML 解析模块来完成,我的问题不是关于在 Perl 中解析 HTML。我的问题是关于正则表达式本身,而 HTML 只是一个例子。

测试用例:我有四个测试.*?[^"]。两者首先产生了预期的结果。但是第三个没有,第四个只是,但我不明白为什么。

  1. 为什么.*?第三个测试在和的两个测试中都失败了[^"]?非贪婪的操作员不应该工作吗?
  2. 为什么第四个测试在 和 的测试中都.*?有效[^"]?我不明白为什么.*在前面包含 a 会改变正则表达式(第三个和第四个测试是相同的,除了.*前面的)。

我可能不完全理解这些正则表达式是如何工作的。Perl Cookbook recipe提到了一些东西,但我不认为它回答了我的问题。

0 投票
1 回答
335 浏览

regex - 可以重写包含非贪婪(不情愿)量词的正则表达式以仅使用贪婪量词吗?

假设我有一个支持文字、正负字符类、有序交替和贪婪量词的正则表达式语言?,*+. (这本质上是 PCRE 的一个子集,没有反向引用、环顾断言或其他一些更奇特的位。)添加非贪婪量词??,*?+?增加这种形式的表达能力吗?

换句话说,给定一个包含非贪婪量词的模式 S,该模式是否可以重写为不包含非贪婪量词的等效模式 T?

如果文献中已经考虑过这个问题,我将不胜感激任何人都可以提供的任何参考资料。我几乎没有找到关于扩展正则表达式形式的表达能力的理论工作(除了关于反向引用如何将你从常规语言转移到无上下文语法的常见事情)。

0 投票
3 回答
1762 浏览

regex - sed 用于删除尾随零 - 正则表达式 - 非贪婪

我有一个文件,它有几行如下

现在,在应用sed此之后,我希望输出如下(将其用于进一步处理)

即,我希望|从结果中删除所有尾随零( 之前的零)。

我尝试了以下方法:(regtest是包含原始数据的文件,如上所示)

没有工作,因为我认为它很贪婪。

将工作。但是,我将不得不sed在同一个文件上重复应用此命令以一个接一个地删除零。没有意义。

我该怎么办?谢谢!

0 投票
2 回答
269 浏览

regex - 正则表达式匹配教程

我多年来一直在使用正则表达式,我已经阅读了一些教程和参考资料(emacs 正则表达式参考是我的圣经),但我仍然无法理解匹配。有没有一个很好的关于正则表达式匹配的综合教程和丰富的例子?任何人都可以给我一个链接,我最终可以深入了解正则表达式匹配吗?

例如困扰我的问题。

结果是:

现在,那到底是什么?贪婪还是非贪婪(它是 C# Regexp.Matches)?

为什么,为什么(非贪婪)结果不是:

(匹配第一对可能的 {})

或(贪婪):

(加工最大可能的 {} 对)

当然,实际结果正是我所需要的,我很高兴正则表达式能读懂我的想法,但我宁愿我读懂他的想法:-D 那么,有没有人有任何关于正则表达式匹配的体面教程帮助我了解这场比赛是如何做到的?