简单的正则表达式解析器

这是一段《代码之美》中的代码,仅用了三十余行实现了^$.*的功能
代码紧凑、优雅,值得研究推敲

/*
逐个尝试把每个text的字符作为匹配项的开头
通过递归用regexp进行尝试匹配
*/


/*match :在text中查找regexp,匹配的入口*/
int match(char *regexp,char *text)
{
    /*如果regexp开头为^,从下一个字符开始匹配,而且只需要匹配一次*/
    if(regexp[0] == '^')
        return matchhere(regexp+1,text);
    do{ /*即使字符串为空也必须检查*/
        if (matchhere(regexp,text))
            return 1;
     }while (*text++!= '\0');
         return 0;
}

/*matchhere在text的开头查找regexp*/
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';
      /*如果出现句点'.'则直接跳过regexp和text的当前字符*/
    if (*text!='\0' && (regexp[0]=='.' || regexp[0]==*text))
          return matchhere(regexp+1,text+1);
     return 0;
}

/*matchstar :在text的开头查找C*regexp*/
int matchstar (int c,char *regexp,char *text)
{
    /*尝试结束星号*的匹配*/
    do { /*通配符*匹配零个或多个实例*/
          if (matchhere(regexp,text))
               return 1;
     }while (*text!='\0' && (*text++ ==c || c== '.'));    
     /*如果星号前为句点'.',那么可以跳过任意字符*/
     return 0;
}