在regex中,我们有贪婪和懒惰的量词。贪婪量词{n,m}
匹配前面的原子/字符/组,最小出现次数为n次,最大出现次数为m次,包括n次。
如果我有一个字符串集合:
a
aa
aaa
aaaa
aaaaaaaaaa
与a{2,4}
匹配:
- 第一行没有任何内容
- aa秒
- aaa在第三
- aaaa在第四
- 第五行的(aaaa(、(aaaa
这很有道理。
然而,如果我有一个懒惰的量词a{2,4}?
,我得到:
- 第一行没有任何内容
- aa在第二条线上
- aa在第三条线上
- 第四行的(aa(和(aa(
- 第五行上的(aa(,(aa(、(aa(和(aa(
这确实有道理。它找到尽可能少的匹配。
我想澄清的部分是,给{n,m}?
形式的任何懒惰量词传递一个最大值m
(在这种情况下,是{2,4}?
中的4(有什么用处吗?结果不是总是与{2,}?
相同吗?
在惰性量词中,是否存在传递最大值(如{2,4}?
中的4(有用的情况?
免责声明:我实际上是在使用正则表达式搜索Vim(/a{-2,4}
(内部,而不是使用任何脚本语言。我认为问题的原则仍然是一样的
当您需要考虑延迟量化表达式后面的时,这很重要。惰性用于防止字符在串联中被后面的表达式消耗。考虑字符串aaaaab
:
- 字符串与
a{2,4}?b
不匹配,因为a{2,4}
无法匹配的a
太多 - 该字符串由
a{2,}?b
匹配,因为它可以根据需要匹配任意多个a