C的正则匹配

http://see.xidian.edu.cn/cpp/html/1428.html

上述网址有关于C的正则匹配用法,或者百度、google搜索“C正则”也能找到为数不多的用法介绍。这里补充一点,就是C的正则表达式传递进去的时候,不可以加//来包围正则,自然也不支持如/[a-z]+/i,它是通过regcomp进行编译的,如果要忽略大小写,编译时设置标记为REG_ICASE即可。

另外还要注意正则表达式中如果要包括"-",那么把它写在最后,或最前,否则会当成a-z这种范围来计算的,regcomp编译无法通过,会提示"nvalid range end”,当然这个信息要通过regerror 来获取。

 

下面附上可用的代码:

 

#include <stdio.h>
#include <sys/types.h>
#include <string.h>
#include <errno.h>
#include <regex.h>

int main(int argc, char **argv)
{
	int errcode, status, i, j;
	int cflags = REG_EXTENDED | REG_ICASE;
	regmatch_t pmatch[3];
	const size_t nmatch = 3;
	regex_t reg;
	const char *pattern = "([a-z0-9._-]+)@([a-z0-9._-]+)";
	char *buf = "Canlynet_sky-Dc123.net@Yahoo-git.com.cn";
	char err_buf[128] = {0};

	if (0 != (errcode = regcomp(&reg, pattern, cflags))) {
		regerror (errcode, &reg, err_buf, sizeof err_buf);
		printf("Error while regcomp: %s\n", err_buf);
		return -1;
	}
	status = regexec(&reg, buf, nmatch, pmatch, 0);
	if (REG_NOMATCH == status)
		printf("No Match\n");
	else if (0 == status) {
		printf("Match:\n");
		for (j=0; j<3; j++) {
			printf("[%d]:", j+1);
			for (i=pmatch[j].rm_so; i<pmatch[j].rm_eo; ++i) 
				putchar(buf[i]);
			printf("\n");
		}
	}
	regfree(&reg);

	return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值