懒惰,贪婪和占有欲量词之间有什么区别?
以下量词如何区别 – 关于场景,速度等。
?
,??
和?+
全部匹配0或1次 。-
*
,*? and
*? and
* +`全部匹配0次或更多次 。 -
+
,+?
和++
都匹配1次或更多次 。
-
?
,*
和+
都很贪心 。 -
??
,*?
和+?
不愿意/懒惰 。 -
?+
,*+
和++
是占有欲的 。
任何人都可以帮我理解这些术语的含义吗? 为什么同一个工作的每个量词有三种变体?
拿绳子
aaaab
并看看以下正则表达式如何匹配它:
Regex Submatches group 1 group 2 group3 (a?)(a*)(ab) a aa ab (a??)(a*)(ab) aaa ab (a?+)(a*)(ab) a aa ab (a*)(a?)(ab) aaa ab (a*?)(a?)(ab) aa a ab (a*+)(a?)(ab) aaaa (a+)(a*)(ab) aaa ab (a+?)(a*)(ab) a aa ab (a++)(a*)(ab) aaaa
说明:
-
a?
尝试匹配一个a
,但是如果整场比赛成功所必需的话,它就准备好了。 -
a??
试图匹配任何东西,但它准备匹配一个如果整个匹配成功所必需的。 -
a?+
尝试匹配一个a
。 如果它可以做到这一点,它将不会退缩以匹配任何内容,如果这对于整体匹配成功是必要的。 如果它不能匹配a
,那么它很乐意与之匹敌。 -
a*
尝试匹配尽可能多a
s,但它准备匹配更少a
s,即使没有,如果整个匹配成功所必需的。 -
a*?
试图匹配任何东西,但它准备匹配尽可能多a
s,这是绝对必要的,以便整场比赛成功,但不是更多。 -
a*+
尝试匹配尽可能多a
s。 如果它可以做到这一点,它将不会退回以匹配更少a
s,如果整体匹配成功所必需的。 如果它甚至不能匹配单个a
,那么它很乐意与之匹敌。 -
a+
尝试匹配尽可能多a
s,但它准备匹配较少a
s(但至少一个),如果整个匹配成功所必需的。 -
a+?
尝试只匹配一个a
,但它准备匹配尽可能多a
s,这是绝对必要的,以便整个比赛成功,但不是更多。 -
a++
尝试匹配尽可能多a
s。 如果它可以做到这一点,它将不会退回以匹配更少a
s,如果整体匹配成功所必需的。 如果它甚至不能匹配单个a
,则正则表达式失败。