字符串正则表达式匹配
2016-05-31 10:42
351 查看
题目:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含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
相关文章推荐
- Mirantis OpenStack Fuel8.0离线安装(MOS8.0本地源)
- 【刷题之路】二叉树的前中后序遍历(非递归)
- java 日期转化
- java 日期转化
- java 日期转化
- os.walk( )遍历指定目录下的所有文件
- 解决Redis cluster的jedis驱动在高并发下的拥塞问题
- 欢迎使用CSDN-markdown编辑器
- 代码: 文字滚动,简版
- HTTP状态码
- VC++ 兼容性 资料收集
- 大数据Spark流处理核心源码解读
- Windows 64位 安装Oracle instantclient 官方绿色版和PL/SQL Developer 总结
- 是否遵从某个协议 ios
- C#中delegate和event的区别(根据unity官方指南)
- NBA总决赛中提高篮球水平的神器
- Selenium+Java+Appium+TestNg环境搭建——Web自动化测试与HTML5测试(3)
- CommonJS,AMD和CMD规范的区别
- Fragment笔记整理
- jQuery文字横向滚动效果的实现代码