简单正则表达式匹配字符串

字符     含义
c    匹配任意的字母c
.    (句点) 匹配任意的单个字符
^     匹配输入字符串的开头
$     匹配输入字符串的结尾

*     匹配前一个字符的零个或者多个出现

例如:程序名 rock heisarockboy  匹配成功返回1;

           程序名 rock heisaboy        匹配失败返回0;

                  程序名 ^.he.*boy$ sheisarockboy    匹配成功返回1

      在文件中查找含有指定表达式可以将文件中字符串划分,然后对每个字符串调用该函数,如果匹配成功可以返回该字符串,最后将结果一起呈现。

#include <stdio.h>

int matchhere(char *regexp,char *text);
int matchstar(int c,char *regexp,char *text);
int match(char *regexp,char *text)
{
	if (regexp[0] == '^')
	{
		return matchhere(regexp+1,text);
	}
	do 
	{
		if (matchhere(regexp,text))
		{
			return 1;
		}
	} while (*text++ !='\0');
	return 0;
}

int matchhere(char *regexp,char *text)
{
	if (regexp[0]=='\0')
	{
		return 1;
	}
	if (regexp[1]=='*')
	{
		return matchstar(regexp[0],regexp+2,text);
	}
	if (regexp[0]=='$'&®exp[1]=='\0')
	{
		return *text=='\0';
	}
	if (*text!='\0'&&(regexp[0]=='.'||regexp[0]==*text))
	{
		return matchhere(regexp+1,text+1);
	}
	return 0;
}

int matchstar(int c,char *regexp,char *text)
{
	do 
	{
		if (matchhere(regexp,text))
		{
			return 1;
		}
	} while (*text!='\0'&&(*text++==c||c=='.'));
}

int main(int argc,char *argv[])
{
	if (argc!=3)
	{
		printf("error input!");
		return 0;
	}
	else{
		int i=match(argv[1],argv[2]);
		printf("%d",i);
		return i;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值