专业的编程技术博客社区

网站首页 > 博客文章 正文

正则表达式匹配(正则表达式匹配指定字符串)

baijin 2024-09-03 09:54:55 博客文章 7 ℃ 0 评论

正则表达式匹配

匹配包含* .的正则表达式:

模式串
"."表示任意一个字符,"*"表示它前面的字符可以出现任意次。

思路:
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;
}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表