以下量词如何区别 - 关于场景,速度等
?
,??
和?+
都匹配 0或1次。*
,*? and
* +`全部匹配 0次或更多次。+
,+?
和++
都匹配 1次或更多次。?
,*
和+
贪婪。??
,*?
和+?
不情愿/懒惰。 ?+
,*+
和++
占有。任何人都可以帮我理解这些术语的含义吗?为什么同一个工作的每个量词有三种变体?
答案 0 :(得分: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?
尝试匹配一个a
,但如果整场比赛必须成功,它就会准备好与之匹配。a??
尝试不匹配任何内容,但如果整场比赛必须成功,则会准备匹配一个a
。a?+
尝试匹配一个a
。如果能够做到这一点,那么如果整体匹配成功所必需的话,它将不退回以匹配任何内容。如果它与a
不匹配,那么它很乐意与之匹敌。a*
尝试匹配尽可能多的a
s,但它已准备好匹配更少的a
s,即使没有,如果整场比赛必须成功。a*?
尝试不匹配,但它准备匹配尽可能多的a
,这是绝对必要的,以便整场比赛成功,但不会更多。a*+
尝试尽可能多地匹配a
个。如果它能够做到这一点,那么如果整体匹配成功所必需的话,它将不返回以匹配更少的a
s。如果它甚至不能与单个a
匹配,那么它很乐意与之匹敌。a+
尝试匹配尽可能多的a
,但如果整场比赛必须成功,那么它准备匹配更少a
个(但至少一个) a+?
尝试只匹配一个a
,但它准备匹配尽可能多的a
,这是绝对必要的,以便整个匹配成功,但不是更多。 a++
尝试尽可能多地匹配a
个。如果它能够做到这一点,那么如果整体匹配成功所必需的话,它将不返回以匹配更少的a
s。如果它甚至不能与单个a
匹配,则正则表达式失败。