简易正则匹配,实现*和?

来源:互联网 发布:数学画图软件 编辑:程序博客网 时间:2024/05/31 13:15

一道常见的面试题,简易的正则匹配,实现*和?

/* * 简易正则表达,匹配*和? * *表示匹配任意个字符 * ?表示匹配一个字符 */#include <stdio.h>#include <stdlib.h>int ismatch(char* regexp, char* str){//如果匹配的字符串为空if(*str == '\0'){if(*regexp == '\0'){return 1;}else{while(*regexp == '*')++regexp;return *regexp == '\0';}}//匹配的字符串不为空,而正则表达式为空if(*regexp == '\0')return 0;//两者都不为空,比较第一个字符if(*regexp == *str)   //如果首字符相同,则比较两者的子串{return ismatch(++regexp, ++str);}else    //如果首字符不同  {if(*regexp == '?'){return ismatch(++regexp, ++str);}else if(*regexp == '*') //这个递归是匹配*的核心代码,但是这种写法理解起来很简单,但是存在重复计算{return ismatch(regexp, ++str) || ismatch(++regexp, ++str);}else{return 0;}}}  int main(){char reg[256];char str[256];int ret;while(scanf("%s %s", reg, str) != EOF){ret = ismatch(reg, str);printf("%s\n", ret ? "yes" : "no");}}


原创粉丝点击