字符串正则表达式匹配

原创 2016年05月31日 10:42:56

题目:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含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



正则表达式里字符串”不包含”匹配技巧

经常我们会遇到想找出不包含某个字符串的文本,程序员最容易想到的是在正则表达式里使用,^(hede)来过滤”hede”字串,但这种写法是错误的。我们可以这样写:[^hede],但这样的正则表达式完全是另...

正则表达式(RegExp)的方法和字符串的模式匹配方法

都能够测试字符串中是否存在指定格式的字符。两种方法主要的区别在于,调用方法的对象和传递的参数,正则表达式的方法调用方法的对象是正则表达式,传输的参数是字符串,而字符串的模式匹配调用方法的对象是字符串,...
  • csm0912
  • csm0912
  • 2016年09月03日 16:33
  • 1372

正则表达式里字符串”不包含”匹配技巧

经常我们会遇到想找出不包含某个字符串的文本,程序员最容易想到的是在正则表达式里使用,^(hede)来过滤”hede”字串,但这种写法是错误的。我们可以这样写:[^hede],但这样的正则表达式完全是另...

字符串处理—正则表达式和模式匹配

正则表达式及字符串的替换与分解

匹配包含换行符(回车)的任意字符串的正则表达式

匹配包含换行符(回车)的任意字符串的正则表达式 正则表达式Java  匹配包含换行符(回车)的任意字符串的正则表达式 1) [\s\S] 2) Pattern.DOTALL    \s...

字符串匹配——正则表达式

检验用户输入信息是否符合规则,经常要用到正则表达式,类似手机号、E-mail的格式判定等,这里简单介绍一下正则表达式的匹配规则吧。...

正则表达式匹配字符串

例子1 declare names varchar2(60) := 'Anna,Matt,Joe,Nathan,Andrew,Aaron,Jeff'; names_adjusted varc...

匹配字符串-正则表达式

原文地址:http://www.cnblogs.com/zhujiabin/p/5669006.html 1. 正则表达式规则 1.1 普通字符     字母、数字、汉字、下划线、以...

字符串——正则表达式匹配

【题目描述】 请实现一个函数用来匹配包括’.’和’*’的正则表达式。 模式中的字符’.’表示任意一个字符,而’*’表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串...

正则表达式匹配不包含某些字符串的技巧

这篇文章主要介绍了正则表达式匹配不包含某些字符串的技巧,详细分解了应该怎么做和这么做的原因,需要的朋友可以参考下 经常我们会遇到想找出不包含某个字符串的文本,程序员最容易想到的是在正则表达式里使...
  • jhq1990
  • jhq1990
  • 2015年03月27日 10:26
  • 486
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符串正则表达式匹配
举报原因:
原因补充:

(最多只允许输入30个字)