2

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

如果我有一组字符串:

a
aa
aaa
aaaa
aaaaaaaaaa

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}) 内部进行搜索,而不是使用任何脚本语言。我想问题的原理还是一样的。

4

1 回答 1

0

当您需要考虑惰性量化表达式之后的内容时,这一点很重要。惰性用于防止字符被串联中的后续表达式消耗。考虑字符串aaaaab

  1. 字符串与 不匹配,因为要匹配的 sa{2,4}?b太多。aa{2,4}
  2. 字符串由 匹配a{2,}?b,因为它可以a根据需要匹配尽可能多的 s。
于 2022-01-17T16:57:20.970 回答