当前位置: 移动技术网 > IT编程>开发语言>正则 > C语言中使用正则表达式

C语言中使用正则表达式

2020年07月13日  | 移动技术网IT编程  | 我要评论

POSIX 规定了C语言正则表达式库函数

regcomp():编译正则表达式

regexec():匹配正则表达式

regfree():释放正则表达式

1、int  regcomp(regex *compiled,const char *pattern,int cflags)

成功返回0,失败返回错误号

compiled:结构体,用来存放编译后的正则表达式,(字符串变成结构体

pattern:指向正则表达式的指针

cflags:指定是用基础正则(直接传0)还是扩展正则,(可以通过|取多个值)值如下:

REG_EXTENDED  :使用扩展正则

REG_ICASE    :匹配字母时忽略大小写

REG_NOSUB:不用存储匹配后的结果,只返回是否成功匹配。如果设置该标志位,则在regexec中将忽略nmatch和pmatch两个参数。即:传入该参数后,regexec中nmatch 取0,matchptr取NULL。

REG_NEWLINE:识别换行符,即从^开头开始匹配,从$行为开始匹配。

2、int regexec(regex_t *compiled,char*string,size_t nmatch,regmatch_t matchptr[].int eflags)

成功返回0,失败返回错误号

compiled:regcomp 编译好的结构体

string:待用正则表达式进行匹配的字符串(目标文件中的一行)

nmatch,matchptr:

matchptr返回匹配的每一行;nmatch返回匹配的行数。

eflags:

REG_NOTBOL:让特殊字符^无作用

REG_NOTEOL:让特殊字符$无作用

typedef struct{

regoff_t rm_so;  // start...  保存匹配了字符串起始位置

regoff_t rm_eo;   // end..   保存匹配了字符串结束位置

}regmatch_t;

3、void regfree(regex_t *compiled)

释放结构体。

4、size_t regerror(int errcode,regex_t *compiled,char *buffer,size_t length);

针对正则表达式的错误处理函数

errcode :传入1.2函数的返回值,判断错误类型

buffer:错误信息。

length:buffer的长度,若错误信息的长度大于这个值,则regerror函数会自动截断超出的字符串,

但仍会返回完整的字符串长度,故可以用如下方法先的到错误字符串的长度:

size_t length = regerror(errcode,compiled,NULL,0);

 

本文地址:https://blog.csdn.net/modi000/article/details/107296054

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网