火龙果代码重构创新.pptVIP

  • 2
  • 0
  • 约6.88千字
  • 约 66页
  • 2016-02-26 发布于湖北
  • 举报
由于存在着一些特殊的情况,以及需要设置终止递归的条件。因此实际的处理过程要更为复杂些最简单的情况就是,当正则表达式推进到末尾时(regexp[0] == \0),所有前面的判断都成功了,那么这个正则表达式就与文本匹配。 如果正则表达式是一个字符后面跟着一个*,那么将会调用matchstar来判断闭包(closure)是否匹配。函数matchstar(c, regexp, text)将尝试匹配重复的文本字符c,从零重复开始并且不断累加,直到匹配text的剩余字符,如果匹配失败,那么函数就认为不存在匹配。这个算法将识别出一个“最短的匹配”,这对简单的模式匹配来说是很好的。 如果没有包含$,并且如果当前不是处于text字符串的末尾(也就是说,*text!=\0)并且如果text字符串的第一个字符匹配正则表达式的第一个字符,那么到现在为止都是没有问题的;我们将接着判断正则表达式的下一个字符是否匹配text的下一个字符,这是通过递归调用matchhere函数来实现的。这个递归调用不仅是本算法的核心,也是这段代码如此紧凑和整洁的原因。 如果所有这些匹配尝试都失败了,那么正则表达式和text在这个位置上就不存在匹配,因此函数matchhere将返回0。 在这段代码中大量地使用了C指针。在递归的每个阶段,如果存在某个字符匹配,那么在随后的递归调用中将执行指针算法(例如,regexp+1 an

文档评论(0)

1亿VIP精品文档

相关文档