C语言中使用正则表达式
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