字符串正则表达式匹配

题目:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。


 bool match(char* str, char* pattern)
    {
        if(str==NULL && pattern==NULL)
            return true;        
        if(str==NULL || pattern==NULL)
            return false;
        return matchCore(str,pattern);
    
    }

   bool matchCore(char *str,char *pattern)  
    {  
        if(*str=='\0' && *pattern=='\0') 
            return true; 
        if(*str!='\0' && *pattern=='\0')
            return false; 
       //以当前字符的下一个字符是否为*作为分界,分别判断在当前字符是否匹配的情况下,应采取何种操作。
        if(*(pattern+1)=='*')  
        {  
      
           if(*str==*pattern || (*pattern=='.'&&*str!='\0'))  //匹配
                return matchCore(str+1,pattern+2)|| matchCore(str+1,pattern)|| matchCore(str,pattern+2); //不管当前字符是否匹配,
            //matchCore(str,pattern+2)总可以是一种下一状态。
            else 
                return matchCore(str,pattern+2);  //不匹配
        } 
       //-----------------------------------------------------------------------------------------
        if(*str==*pattern || (*str!='\0'&& *pattern=='.'))//匹配
            return matchCore(str+1,pattern+1);
        else
           return false; //不匹配
           
 } 

注:这里主要考虑‘*’字符对匹配的影响。现当当前字符匹配时针对以下三种情况分析:
matchCore(str+1,pattern+2)
//字符串 aabc  模式串  aa*bc      
matchCore(str+1,pattern)
//字符串 aaaabc  模式串  aa*bc (aaa*bc   aaaabc)     指针始终指向*前的第一个a的位置,一直处于当前状态

 
matchCore(str,pattern+2)
//字符串 aabc  模式串  aa*abc



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值