以下量词如何不同 - 在场景、速度等方面。
?
,??
并且?+
全部匹配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
,则正则表达式失败。