DoL*_*Sky 5 ruby regex ruby-1.9.3
以下量词如何区别 - 关于场景,速度等.
?,??并且?+所有匹配0或1次.*,*? and*+`全部匹配0次或更多次.+,+?并且++所有匹配1次或更多次.?,*并且+是贪婪的.??,*?并且+?是勉强/懒惰.?+,*+并++有占有欲.任何人都可以帮我理解这些术语的含义吗?为什么同一个工作的每个量词有三种变体?
拿绳子
aaaab
Run Code Online (Sandbox Code Playgroud)
并看看以下正则表达式如何匹配它:
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!>
Run Code Online (Sandbox Code Playgroud)
说明:
a?试图匹配一个a,但如果整场比赛必须成功,它就准备好了.a??尝试不匹配任何东西,但a如果整场比赛必须成功,它就准备匹配一个.a?+试图匹配一个a.如果它可以做到这一点,它将不会退回以匹配任何内容,如果这对于整体匹配成功是必要的.如果它不能匹配a,那么它很乐意与之匹敌.a*尝试匹配尽可能多的as,但它准备匹配更少的as,即使没有,如果整个匹配成功所必需的.a*?尝试不匹配,但它准备匹配尽可能多的as,以便整场比赛成功,但不是更多.a*+尝试匹配尽可能多的as.如果它可以做到这一点,它将不会退回以匹配更少的as,如果整体匹配成功所必需的.如果它甚至不能匹配a,那么它很乐意与之匹敌.a+尝试匹配尽可能多的as,但它准备匹配更少的as(但至少一个),如果整个匹配成功所必需的.a+?尝试只匹配一个a,但它准备匹配尽可能多的as,以便整个比赛成功,但不是更多.a++尝试匹配尽可能多的as.如果它可以做到这一点,它将不会退回以匹配更少的as,如果整体匹配成功所必需的.如果它甚至不匹配a,则正则表达式失败.