正则表达式匹配
匹配包含* .的正则表达式:
模式串"."表示任意一个字符,"*"表示它前面的字符可以出现任意次。
思路:
1.当模式串中的第二个字符不是"*"的时候,
如果字符串中的第一个字符和模式中的第一个字符匹配,那么,
字符串和模式串都向右移动一位。然后匹配剩余的字符串和模式。
如果字符串的第一个字符和模式中的第一个字符不匹配,返回失败。
2.当模式中的第二个字符是"*"的时候,
- 首字符字符串有0个,模式有,则字符串不变,模式+2
- 首字符字符串有1个,模式有,则字符串+1,模式+2
- 首字符字符串有2个以及2个以上,模式有2,则字符串+1,模式不变
参考代码:
#include <stdio.h>
int core(char* str,char* pattern)
{
if(*str == '\0' && *pattern == '\0')
return 1;
if(*str != '\0' && *pattern == '\0')
return 0;
if(*(pattern + 1) == '*')
{
if(*str == *pattern || (*pattern == '.' && *str != '\0'))
return core(str + 1,pattern + 2)//1个
|| core(str + 1,pattern)//2个以及2个以上
|| core(str,pattern + 2);//0个
else
return core(str,pattern + 2);//0个
}
if(*str == *pattern || (*pattern == '.' && *str != '\0'))
return core(str + 1,pattern + 1);// !*
return 0;
}
int match(char* str,char* pattern)
{
if(!str || !pattern)
return 0;
return core(str,pattern);
}
int main()
{
char* str = "abcdef";
char* pattern = "i*ab.d*e*f";
int res = match(str,pattern);
printf("%d\n",res);
return 0;
}
本文暂时没有评论,来添加一个吧(●'◡'●)