tcl中正则表达式的匹配问题
像+ * ? 以及{M,N}
这几种量词(匹配数量)默认是属于贪婪量词,进行贪婪匹配
什么叫做贪bai婪匹配呢?贪婪就是尽可能的多匹配,贪心的意思
比如现在目标字符串是 AAAA 四个A组成的字符串
A* 和 A+ 都会匹配 AAAA
A? 则会匹配 A
这就是贪婪匹配,实际运用中,有的时候我们却希望尽可能少的匹配
比如目标字符串 ab
此时如果我们使用了贪婪量词
. 则会匹配 ab 整个字符串
可是我们只想要匹配第一对span标签怎么办?此时就需要用到懒惰量词,意思也很明显了,能偷懒就偷懒,呵呵,懒惰量词与贪婪量词的差别就是在贪婪量词的后面加个?号,就构成了懒惰量词,如下表
贪婪量词 懒惰量词
A A*?
A+ A+?
A? A??
A A?
还是以目标字符串 AAAA 来讨论
A*?
号是匹配0次或多次,要偷懒怎么办呢?当然是最少次数了,也就是0 所以在这里匹配的结果是
没有匹配到任何内容
A+?
+是1次或多次,分析方法同上,最少次数是1次,所以匹配结果就是 A
A??
?是0次或1次,所以这里也不进行匹配,会偷懒吧,呵呵
再来看看刚刚的
ab
要匹配第一对span,用懒惰量词就是.?