vs 2010 正则表达式校验

#include <sys/types.h>
#include "regex.h"
#include <stdio.h>
#include <string.h>
/* 取子串的函数 */
static char* substr(const char*str, unsigned start, unsigned end)
{
	unsigned n = end - start;
	static char stbuf[256];
	strncpy(stbuf, str + start, n);
	stbuf[n] = 0;
	return stbuf;
}
/* 主程序 */
int main(int argc, char** argv)
{
	char * pattern =  "";
	int x, z, lno = 0, cflags = REG_EXTENDED | REG_NOSUB ;
	char ebuf[128];
	char lbuf[256] = "";
	regex_t reg;
	regmatch_t pm[10];
	const size_t nmatch = 10;
	/* 编译正则表达式*/
	//pattern = argv[1];
	z = regcomp( &reg, pattern,cflags);
	if (z != 0) {
		regerror(z, &reg, ebuf, sizeof(ebuf));
		fprintf(stderr, "%s: pattern '%s' \n", ebuf, pattern);
		return 1;
	}
	/*    逐行处理输入的数据 */
	//while (fgets(lbuf, sizeof(lbuf), stdin)) {
	//	++lno;
		if ((z = strlen(lbuf)) > 0 && lbuf[z - 1] == '\n')
			lbuf[z - 1] = 0;
		/* 对每一行应用正则表达式进行匹配 */
		z = regexec(&reg, lbuf, nmatch, pm, 0);
		if (z == REG_NOMATCH) return 0;
		else if (z != 0) {
			regerror(z, &reg, ebuf, sizeof(ebuf));
			fprintf(stderr, "%s: regcom('%s')\n", ebuf, lbuf);
			return 2;
		}
		/* 输出处理结果 */
		for (x = 0; x < nmatch && pm[x].rm_so != -1; ++x) {
			if (!x) printf("%04d: %s\n", lno, lbuf);
			printf("$%d='%s'\n", x, substr(lbuf, pm[x].rm_so, pm[x].rm_eo));
		}
	//}
	/* 释放正则表达式    */
	regfree(&reg);
	return 0;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值