懒惰,贪婪和占有欲量词之间有什么区别?

以下量词如何区别 – 关于场景,速度等。

  • ????+全部匹配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 ,则正则表达式失败。