精确 greedy/reluctant X{n} 之间的差异?
Difference between exact greedy/reluctant X{n}?
在 Java Pattern
class 的文档中,我看到确切的量词 X{n}
有贪婪和不情愿的形式:
Greedy quantifiers
- X{n} X, exactly n times
- ...
Reluctant quantifiers
- X{n}? X, exactly n times
- ...
文档给出了贪婪行为和不情愿行为之间区别的一般示例,但没有给出确切量词的任何示例。
起初我想,"Well, maybe the difference is that X
itself could match in difference ways." 但是 X
里面可以有自己的 greedy/reluctant 说明符,果然我测试了它,这没有区别 (greedy vs reluctant).
鉴于无论哪种情况,它都会精确匹配 n
次,两者的行为有什么区别吗?
不情愿与贪婪只有在可以进行可变长度匹配时才有意义;不情愿的量词将匹配尽可能小的值,贪婪的匹配最大值。
为了区分有限数量的行为,它必须有一个范围,即数量必须有不同的最小值和最大值。举例说明:
给定输入 1234567
,捕获的组是:
(\d{2,3})(\d+) -> (123)(4567)
(\d{2,3}?)(\d+) -> (12)(34567)
当只有固定数量时,例如 \d{2}
添加 ?
.
在行为上没有区别
在 Java Pattern
class 的文档中,我看到确切的量词 X{n}
有贪婪和不情愿的形式:
Greedy quantifiers
- X{n} X, exactly n times
- ...
Reluctant quantifiers
- X{n}? X, exactly n times
- ...
文档给出了贪婪行为和不情愿行为之间区别的一般示例,但没有给出确切量词的任何示例。
起初我想,"Well, maybe the difference is that X
itself could match in difference ways." 但是 X
里面可以有自己的 greedy/reluctant 说明符,果然我测试了它,这没有区别 (greedy vs reluctant).
鉴于无论哪种情况,它都会精确匹配 n
次,两者的行为有什么区别吗?
不情愿与贪婪只有在可以进行可变长度匹配时才有意义;不情愿的量词将匹配尽可能小的值,贪婪的匹配最大值。
为了区分有限数量的行为,它必须有一个范围,即数量必须有不同的最小值和最大值。举例说明:
给定输入 1234567
,捕获的组是:
(\d{2,3})(\d+) -> (123)(4567)
(\d{2,3}?)(\d+) -> (12)(34567)
当只有固定数量时,例如 \d{2}
添加 ?
.