欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C语言中使用正则表达式

程序员文章站 2022-03-22 08:30:37
POSIX 规定了C语言正则表达式库函数regcomp():编译正则表达式regexec():匹配正则表达式regfree():释放正则表达式1、int regcomp(regex *compiled,const char *pattern,int cflags)成功返回0,失败返回错误号compiled:结构体,用来存放编译后的正则表达式,(字符串变成结构体)pattern:指向正则表达式的指针cflags:指定是用基础正则(直接传0)还是扩展正则,(可以通过|取多个值)....

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