5

以下量词如何不同 - 在场景、速度等方面。

  • ?,??并且?+全部匹配0 或 1 次
  • *, *? and*+` 都匹配0 次或多次
  • +,+?并且++全部匹配1 次或多次

  • ?*并且+贪婪的。
  • ??*?并且+?情愿/懒惰
  • ?+,*+并且++所有格

谁能帮我理解这些术语的含义?为什么同一个工作的每个量词有三种变体?

4

1 回答 1

7

拿绳子

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              <Match fails!>
(a+)(a*)(ab)   aaa               ab 
(a+?)(a*)(ab)  a        aa       ab
(a++)(a*)(ab)  aaaa              <Match fails!>

解释:

  • a?尝试匹配 one a,但如果整个匹配成功需要,它准备不匹配任何内容。
  • 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,则正则表达式失败。
于 2013-01-15T22:22:13.587 回答