字符串正则表达式匹配

原创 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



使用正则表达式判断字符串匹配

这是之前上课时做的笔记,现在发现正则表达式很常用,所以放在上面,方便查找! 正则表达式是:包含字符、数字和通配符的文字字符串。 1字符串匹配的判断 通过正则表达式进行字符串匹配的判断 使用St...
  • fanny__
  • fanny__
  • 2015年10月21日 15:44
  • 1809

正则表达式匹配任意字符串(包括换行符)

正则表达式
  • lzz360
  • lzz360
  • 2014年09月10日 13:06
  • 4545

模糊匹配字符的正则表达式+例子

package com.cn.util; import java.util.regex.Pattern; /**  * 正则表达式 工具类  *   * @author li...
  • lify2011
  • lify2011
  • 2015年09月10日 12:34
  • 4484

正则表达式 进阶(一)-- 匹配多连续字符、位置匹配、子表达式使用

之前一篇博文正则表达式 入门讲了下正则表达式的一些基本使用,这次讲一下高级的。还是那句话,要多用,才能够记住并留在你的大脑皮层。 1. 匹配一个或多个连续字符 用+符号, a+,意思是匹配...
  • wzzfeitian
  • wzzfeitian
  • 2013年05月22日 07:07
  • 79880

正则表达式找程序实用例子:正则表达式匹配不报含指定字符串,匹配后面跟着指定字符串

1. 正则表达式对于程序员写代码的作用:正确有序的使用正则表达式去阅读查询代码会事半功倍,编译移植开源软件程序的时候休要修改Makefile或者configure文件等等,需要有条件查找某些字符串,就...
  • mynameislinduan
  • mynameislinduan
  • 2017年09月05日 15:47
  • 463

正则表达式——匹配多个字符串之一

当需要匹配多个字符串其中之一时,如: 匹配abc|def两个字符串之一时使用非元组捕获语。 非元组捕获的语法为: (?:exp) 例如匹配一个网页中的所有图片的url,而图片的url通常以jpg,...
  • C_Creator
  • C_Creator
  • 2016年08月20日 21:38
  • 274

正则表达式匹配以某字符串开始和结尾的字符串

今天在整理MvvmCross(c# mvvm跨平台框架)文档做epub电子书时,遇到到了文字显示不太好,需要去掉指定开头的字符串。 然后写了下面这个正则表达式 正则表达式 可以匹配下面高亮这段文本 ...
  • loongsking
  • loongsking
  • 2017年05月08日 15:53
  • 4194

java 通过正则表达式获取匹配字符串的例子

java 通过正则表达式获取匹配字符串的例子
  • WD4871
  • WD4871
  • 2017年05月17日 14:59
  • 268

python-正则表达式 匹配多个字符串的语法规则

#'*'的作用就是匹配前一个字符0次或者是无限次 In [5]: ma=re.match(r'[A-Z][a-z]*','A')#匹配0次 In [6]: ma Out[6]: In [7]: ...
  • GoodLuckAC
  • GoodLuckAC
  • 2016年12月07日 14:53
  • 8031

如何用正则表达式匹配指定字符开始和指定字符结束

a.*?b就是a开始b结束的匹配如果要限制是一行的开头和末尾的话就是^a.*?b$
  • txqd1989
  • txqd1989
  • 2017年06月21日 09:54
  • 3789
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符串正则表达式匹配
举报原因:
原因补充:

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