Linux c 使用正则表达式

在用正则表达式进行电话号码和邮箱的格式验证的时候,发现网络上并没有很好的关于linux c 的正则表达式的材料。大多都是对函数进行了一下翻译之类的,对使用则涉及的不全面。

下面是我写的一个例子,其中比较关键的点我都添加了注释,希望对你有帮助。

#include <stdio.h>
#include <sys/types.h>
#include <regex.h>
/*
	一般的现在的linux发行版本都应该包含了这个头文件的
*/

int main(int argc, char** argv)
{
	regex_t reg;
	//这是一个待填充的数据结构,它具有指针数据类型,指针的值和对应的空间都会在regcomp后被填充。
	regmatch_t pmatch[1];
	//这个是存放字符模式串解析结果的。该数组的第一个存放主串,后面存放子串
	const size_t nmatch = 1;
	//这是模式串的数目,本例子只是一个简单的数字判定段,所以只是使用了一个元素
	
	const char* pattern = "^[0-9]{1,7}$";	
	/*
	我使用的模式串,一般的,推荐不要使用\d\w等此类的等价字符,不因为别的,就因为我在使用的时候,发现支持的不是很好,
	例如上述的匹配规则,如果换成等价字符应该是^\\d{1,7}$,可是实际,这个却不能很好的工作,所以告诫不要胡乱使用等价串。这里
	特别标记下有哪些是等价串:
  \d等价于[0-9]
  \w等价于[A-Za-z0-9]。

	尽量使用标准的写法吧。
	另外提醒一下,js中用的非常的频繁的模式串不是拿来就可以用的。至少,在js中\不用转义,在c中明显就要转义吧!
	*/
	regcomp(&reg, pattern, REG_EXTENDED);
	//上述函数,第二个就是模式串,第三个是匹配标记值,这个不是很关键

	int status  = regexec(&reg, argv[1], nmatch, pmatch ,0);
	//regexec是实际执行正则验证的函数,其中,第二个参数是待比较的字符串,它的返回值就是执行结果代码error
	char error[100];
	size_t length = regerror(status, &reg, error,100);
	//注意了,上述函数的第一个参数就是regexec函数的返回值。
	printf("%s", error);
	regfree(&reg);
	//当然最后要释放空间的

	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值