正则表达式匹配器

来源:互联网 发布:php 继承 use 编辑:程序博客网 时间:2024/04/28 08:31

来自《代码之美》

匹配算法:

/* 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;

}


/* 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';

  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;

}