惰性量词 {n,m} 中的 max m 有什么用??
What is the use of max m in the lazy quantifiers {n,m}??
在正则表达式中,我们有 greedy and lazy quantifiers。贪心量词 {n,m}
匹配前面的 atom/character/group 最少出现 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
(在这种情况下, [=16 中的 4 =])?结果不就是总是和{2,}?
一样吗?
是否存在传递最大值(如 {2,4}?
中的 4)对惰性量词有用的情况?
免责声明:我实际上是在使用正则表达式在Vim (/a{-2,4}
) 中进行搜索,而不是在任何脚本语言中。我觉得题的原理还是一样的
当您需要考虑延迟量化表达式后面的内容时,这很重要。惰性用于防止字符被串联中的后续表达式消耗。考虑字符串 aaaaab
:
- 字符串与
a{2,4}?b
不匹配,因为 a
太多 a{2,4}
无法匹配。
- 字符串与
a{2,}?b
匹配,因为它可以根据需要匹配尽可能多的 a
。
在正则表达式中,我们有 greedy and lazy quantifiers。贪心量词 {n,m}
匹配前面的 atom/character/group 最少出现 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
(在这种情况下, [=16 中的 4 =])?结果不就是总是和{2,}?
一样吗?
是否存在传递最大值(如 {2,4}?
中的 4)对惰性量词有用的情况?
免责声明:我实际上是在使用正则表达式在Vim (/a{-2,4}
) 中进行搜索,而不是在任何脚本语言中。我觉得题的原理还是一样的
当您需要考虑延迟量化表达式后面的内容时,这很重要。惰性用于防止字符被串联中的后续表达式消耗。考虑字符串 aaaaab
:
- 字符串与
a{2,4}?b
不匹配,因为a
太多a{2,4}
无法匹配。 - 字符串与
a{2,}?b
匹配,因为它可以根据需要匹配尽可能多的a
。