以下量词如何不同 - 在场景、速度等方面。
?,??并且?+全部匹配0 或 1 次。*,*? and*+` 都匹配0 次或多次。+,+?并且++全部匹配1 次或多次。
?,*并且+是贪婪的。??,*?并且+?不情愿/懒惰。?+,*+并且++是所有格。
谁能帮我理解这些术语的含义?为什么同一个工作的每个量词有三种变体?
以下量词如何不同 - 在场景、速度等方面。
?,??并且?+全部匹配0 或 1 次。*, *? 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 <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,则正则表达式失败。