vim的匹配模式中有个非贪婪重复模式匹配很难理解,特此记录一下。
我们知道重复匹配可以指定匹配次数,使用 “{n,m}” 这样的形式。
其中 “n” 和 “m” 都是数字。在它前面的那个项将被重复 “n” 到 “m” 次 。例如 :
/ab\{3,5}
匹配 “abbb”、“abbbb” 以及 “abbbbb”。
当 “n” 省略时,被默认为零。当 “m” 省略时,被默认为无限大。当 “,m” 省略时,就表示重复正好 “n” 次。例如:
模式 匹配次数
\{,4} 0,1,2,3 或 4
\{3,} 3,4,5 等等
\{0,1} 0 或 1,同 \=
\{0,} 0 或更多,同 *
\{1,} 1 或更多,同 \+
\{3} 3
还有另一种不太好理解的匹配方式,使用"{-n,m}"的形式。他表示匹配尽可能少的字符。
例如,以下命令:
/ab\{-1,3}
将匹配 “abbb” 中的 “ab”。-1就表示只匹配尽可能少的b,这里是一个b,然而这里的3就体现不出作用来了。
再举个例子:
/ab\{-1,3}c
将匹配"abc",“abbc”,“abbbc”。这里的-1又体现不出作用来了。
再进一步:
/ab\{-1,3}c\=
将能够匹配"abc",“abbc”,“abbbc”,“abbb” 中的 “ab”。当c存在时就会限制b的最大个数不能超过3,当c不存在时,会匹配尽可能少的b的个数。