匹配包含.和*的正则表达式

                                                   匹配包含.和*的正则表达式

其中.可以匹配任意一个字符。*可以匹配前面一个或多个字符,也可以是0个。参考《剑指 OFFER》写的以下的程序。

bool  expr(const char *str,const char *pattern){

    if(*str == '\0' && *pattern =='\0')
        return true;

    //字符串长于pattern匹配的字符串
    if(*str !='\0' && *pattern =='\0')
        return false;

    //规则下一个符号是*号,
    if(  *(pattern+1) =='*'){
        //当前字符与pattern相等的情况;或pattern是. ,可以匹配任意字符情况
        if((*str == *pattern) || (*pattern =='.' && *str!='\0' ) ) {
            
            return expr(str + 1, pattern + 2)//匹配下一个字符
                   || expr(str+1,pattern)//pattern为.符号,则pattern可以匹配多个字符串
                   || expr(str,pattern+2);//忽略*号的匹配

        }else{
            //忽略*号的匹配
            return  expr(str,pattern+2);
        }

    }

    //匹配一个字符,如果相等则匹配下一个;如果规则中下一个字符是.,由于.匹配任意字符,可以继续匹配
    if(  (*str !='\0' && *pattern=='.') || (*str == *pattern) ){
        return expr(str+1,pattern+1);
    }

    //不符合以上规则都return false
    return false;
}

 

点赞