走过了一程,觉得路上越发颠簸了起来,我低头查看,原来我的代码已经生疏了。
———— Al Tusari
怎么实现一个简单的正则表达式的字符串匹配器? 抄一段代码吧,引自<代码之美>:
/*match :在text中查找regexp*/
int match(char *regexp,char *text) { if(regexp[0] == '^') return matchhere(regexp+1,text); do{ if (matchhere(regexp,text)) return 1; }while (*text++!= '\0'); return 0; } int matchhere(char *regexp,char *text) { if (regexp[0] == '\0') return 1; if (regexp[1] == '*') return matchstar(regexp[0],regexp+2,text); if (regexp[0] == '$' && regexp[1]=='\0') return *text == '\0'; if (*text!='\0' && (regexp[0]=='.' || regexp[0]==*text)) return matchhere(regexp+1,text+1); return 0; } int matchstar (int c,char *regexp,char *text) { do { if (matchhere(regexp,text)) return 1; }while (*text!='\0' && (*text++ ==c || c== '.')); return 0; }
想起了Alan Cox说过的一句话:”线程是为不懂状态机的人准备的“。正则式也如此。