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

regex - POSIX 正则表达式中的不情愿量词和正前瞻

我试图使用不情愿的量词(。*?),但这似乎不适用于 POSIX 正则表达式。POSIX 不支持不情愿的量词吗?如果没有,是否有任何替代方案。我也无法在 POSIX 中获得积极的前瞻性工作。也不支持吗?任何帮助,将不胜感激。谢谢。

0 投票
0 回答
24 浏览

java - 正则表达式未正确提取(Java 模式/匹配器)

我有一个关于正则表达式的勉强获取策略的问题。

给定以下 Java 代码:

我得到这个输出:

所以 matcher.group(1) 只是提取一个空字符串。看来我不明白不情愿的获取策略是如何真正起作用的。我曾认为模式中第一个定义的组:

(.*?)

将尝试匹配尽可能少的字符。换句话说,当它可以与第二组匹配时:

(\d\d\d\d-\d\d-\d\d)

然后它将它与该组匹配并以“无”消耗第一组。

在我看来,第三组也应该没有影响。

有人可以解释一下为什么在给定的示例中我没有从 matcher.group(1) 中获得预期的字符串“2017-03-16”吗?

谢谢

0 投票
2 回答
704 浏览

regex - 所有格量词正则表达式的实际使用

我理解.*(贪婪的量词)回溯并试图找到匹配项。和.*+(占有量词)不回溯。

但是我一直在使用.*并且.\*?经常使用但不知道何时使用.*+.

.*+有人可以给出应该在哪里使用的情况或示例吗?

一个例子的解释表示赞赏。

编辑:

我已经完成了理论部分,我重复一遍,我了解它是如何工作的。我只需要一个匹配所有格量词的例子 ( .*+)

0 投票
1 回答
32 浏览

regex - 惰性量词 {n,m} 中的 max m 有什么用?

在正则表达式中,我们有贪婪和懒惰的量词。贪心量词{n,m}匹配前面的原子/字符/组,最少出现 n 次,最多出现 m 次,包括端点。

如果我有一组字符串:

a{2,4}匹配:

  • 第一行什么都没有
  • 第二个aa
  • 第三个aaa
  • 第四天 aaaa
  • (aaaa)、(aaaa) 和 (aa) 在第五行

这就说得通了。

但是,如果我有一个惰性量词a{2,4}?,我会得到:

  • 第一行什么都没有
  • aa 在第二行
  • aa 在三线
  • (aa) 和 (aa) 在第四行
  • (aa)、(aa)、(aa)、(aa) 和 (aa) 在第五行

这实际上是有道理的。它找到最少的可能匹配项。

我想澄清的部分 - 以{n,m}?最大值的形式传递任何惰性量词m(在本例中为 4 in {2,4}?)是否有任何用处?结果不总是一样{2,}?吗?

是否存在传递最大值(如 4 in {2,4}?)在惰性量词中有用的情况?

免责声明:我实际上是使用正则表达式在 Vim ( /a{-2,4}) 内部进行搜索,而不是使用任何脚本语言。我想问题的原理还是一样的。

0 投票
0 回答
13 浏览

java - jEdit中不情愿的Java正则表达式模式

我需要对 SoapUI 项目执行许多重复修改,并试图在 jEdit 中使用正则表达式来执行批量编辑。我知道这种方法是惰性的,并且正则表达式不太适合解析 XML,但我希望获得有关我正在使用的正则表达式的建议(我认为它正在被编译成 Java 模式)以获得快速胜利。

这种模式似乎可以识别我感兴趣的标签。

此模式执行与前者相同的工作。

这种模式突然开始跨标签边界匹配,超出预期。

“多行模式” ([\s\S]*) 上的不情愿修改 (?) 的目的是限制匹配的内容在单个 XML 标记元素内。我对 Java 的正则表达式模式要求太多了吗?或者是否有合理的解释为什么在两个不情愿的模式之间添加内容会突然扩展匹配的字符串?是否对模式进行了修改,以实现将匹配限制在单个 XML 标记内的目标?