以下量词在场景、速度等方面有何不同?
-
?
, ??
and ?+
全部匹配0或1次.
-
*
, *? and
*+` 全部匹配0次或多次.
-
+
, +?
and ++
全部匹配1次或多次.
-
?
, *
and +
are greedy.
-
??
, *?
and +?
are 不情愿/懒惰.
-
?+
, *+
and ++
are 所有格.
谁能帮助我理解这些术语的含义?为什么同一个工作的每个量词有三种变体?
拿绳子
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?
尝试匹配一个a
,但如果整个匹配成功有必要的话,它准备不匹配任何内容。
-
a??
尝试不匹配任何内容,但已准备好匹配一个a
如果这是整场比赛成功所必需的。
-
a?+
尝试匹配一个a
。如果它能做到这一点,它就会not如果整个匹配成功有必要,则退后不匹配任何内容。如果无法匹配a
,那么它很乐意不匹配任何内容。
-
a*
尝试匹配尽可能多的a
尽可能多,但它准备匹配更少的a
s,如果这对于整场比赛的成功是必要的,那么甚至什么都不做。
-
a*?
尝试不匹配任何内容,但它已准备好匹配尽可能多的内容a
为了整场比赛的成功,这是绝对必要的,但仅此而已。
-
a*+
尝试匹配尽可能多的a
尽其所能。如果它能做到这一点,它就会not后退以匹配更少的a
s 如果这对于整个比赛的成功是必要的。如果连一个都无法匹配a
,那么它很乐意不匹配任何内容。
-
a+
尝试匹配尽可能多的a
尽可能多,但它准备匹配更少的a
s(但至少一个),如果这是整场比赛成功所必需的。
-
a+?
尝试只匹配一个a
,但它已准备好匹配尽可能多的a
为了整场比赛的成功,这是绝对必要的,但仅此而已。
-
a++
尝试匹配尽可能多的a
尽其所能。如果它能做到这一点,它就会not后退以匹配更少的a
s 如果这对于整个比赛的成功是必要的。如果连一个都无法匹配a
,则正则表达式失败。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)