以下是对
读书笔记之正则表达式匹配器(一)
匹配代码的分析:
- 函数 match(regexp,text)用来判断文本中是否出现正则表达式,如果找到了一个匹配的正则表达式则返回1,否则返回0,如果有多个匹配的正则表达式,那么函数讲找到文本中最左边的并且最短的那个。比如说,如果正则表达是^xyz,那么仅当xyz出现在文本的开头位置而不是中间的某个位置时才会匹配成功。
- 函数matchhere(regexp,text)函数完成了大部分的匹配工作,这个函数把正则表达式的第一个字符与文本的开头部分(第一个字符)进行匹配。如果匹配失败,那么在这个文本位置上九不存在匹配,matchhere(regexp,text)返回0;如果匹配成功,函数将推进到正则表达式的下一个字符和文本的下一个字符进行匹配。注意这里采用了 递归 的思想。
- 如果正则表达式是一个字符后面儿跟着一个 * ,那么将会调用matchstar来判断闭包(closure)是否匹配,函数matchstar(c,regexp,text)将尝试匹配重复的文本字符c,从零重复开始并且不断累加,直到匹配text的剩余字符,如果匹配失败,那么函数九认为不存在匹配。注意这个算法将识别出一个“最短的匹配”。
另外还有一点需要注意,这段代码中使用了大量的c指针。在递归的每个阶段,递归的深度不会超过匹配模式的长度,而通常情况下匹配模式的长度都是很短的,因此不会出现内存耗尽的危险。