正则匹配实例

/* 正则匹配
 * 参数:	buffer	需查找的范围
 *			pattern	正则匹配的模式
 *			start	匹配成功的字符串所在的相对偏移量起始位置
 *			end		匹配成功的字符串所在的相对偏移量结束位置
 * 返回值: 1, 匹配
 *         0, 不匹配
 *        -1, 出错
 */
int regex_match (char *buffer, char *pattern, regoff_t *start, regoff_t *end)
{
	int match_ret = 0;
	int status = 0;
	int nmatch = 1;
	int cflags = REG_EXTENDED | REG_ICASE | REG_NEWLINE;
	int errcode = 0;
	char  err_buf[BUFF_SIZE] = {0};
	regmatch_t pmatch[1];
	regex_t reg;

	if(NULL == buffer || NULL == pattern)
	{
		DEBUG_PRINT ("buffer or pattern NULL\n");
		match_ret = OPERATE_FAIL;
		goto label_ret;
	}

	if (0 != (errcode = regcomp(&reg, pattern, cflags)))
	{
		regerror (errcode, &reg, err_buf, sizeof(err_buf));;
		DEBUG_PRINT ("Error while regcomp: %s\n", err_buf);

		match_ret = OPERATE_FAIL;
		goto label_ret;
	}

	status = regexec(&reg, buffer, nmatch, pmatch, 0);
	if(REG_NOMATCH == status)
	{
		match_ret = REGEX_NOMATCH;
		goto label_ret;
	}
	else if(0 == status)
	{
		match_ret = REGEX_MATCH;
		*start = pmatch[0].rm_so;
		*end = pmatch[0].rm_eo;
		goto label_ret;
	}
	else
	{
		DEBUG_PRINT ("regexec() error!\n");
		match_ret = OPERATE_FAIL;
		goto label_ret;
	}

label_ret:
	if (0 == errcode)
	{
		regfree(&reg);
	}

	return match_ret;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值