C语言使用正则表达式
#include<regex.h>
regcomp 编译正则表达式
int regcomp (regex_t *compiled, const char *pattern, int cflags);
①regex_t 是一个结构体数据类型,用来存放编译后的正则表达式,它的成员re_nsub 用来存储正则表达式中的子正则表达式的个数,子正则表达式就是用圆括号包起来的部分表达式。
②pattern 是指向我们写好的正则表达式的指针。
③cflags 有如下4个值或者是它们或运算(|)后的值:
参数 | 含义 |
---|---|
REG_EXTENDED | 以功能更加强大的扩展正则表达式的方式进行匹配 |
REG_ICASE | 匹配字母时忽略大小写。 |
REG_NOSUB | 不用存储匹配后的结果。 |
REG_NEWLINE | 识别换行符,这样’$’就可以从行尾开始匹配,’^’就可以从行的开头开始匹配。 |
使用示例,匹配相等判断
regex_t re;
char regex[]="==";
char error_msg[128];
ret=regcomp(&re, regex, REG_EXTENDED);
if(ret!=0){regerror(ret,&re,error_msg,REG_EXTENDED);printf("%s\n",error_msg);}
regerror 显示错误信息
size_t regerror(int errcode, const regex_t *preg, char *errbuf,size_t errbuf_size);
errcode是由regcomp 和 regexec 函数返回的错误代号。
preg是已经用regcomp函数编译好的正则表达式,这个值可以为NULL。
errbuf指向用来存放错误信息的字符串的内存空间。
errbuf_size指明buffer的长度,如果这个错误信息的长度大于这个值,则regerror 函数会自动截断超出的字符串,但他仍然会返回完整的字符串的长度。
regexec 匹配正则表达式
使用上面编译过的regex_t结构体进行匹配。
int regexec(const regex_t *preg, const char *string, size_t nmatch,regmatch_t pmatch[], int eflags);
regmatch_t 是一个结构体数据类型,在regex.h中定义:
typedef struct {
regoff_t rm_so;
regoff_t rm_eo;
} regmatch_t;
成员rm_so 存放匹配文本串在目标串中的开始位置,rm_eo 存放结束位置。通常我们以数组的形式定义一组这样的结构。
参数说明:
preg是已经用regcomp函数编译好的正则表达式。
string是目标文本串。
nmatch是regmatch_t结构体数组的长度。
pmatch是regmatch_t类型的结构体数组,存放匹配文本串的位置信息。
eflags 有两个值:
REG_NOTBOL 让特殊字符^无作用
REG_NOTEOL 让特殊字符$无作用
参数pmatch就是用来保存这些匹配位置的,而参数nmatch则告诉函数regexec()最多可以把多少个匹配结果填充到pmatch数组中。当regexec()函数成功返回时,从string+pmatch[0].rm_so到string+pmatch[0].rm_eo是第一个匹配的字符串,而从string+pmatch[1].rm_so到string+pmatch[1].rm_eo,则是第二个匹配的字符串,依此类推。
使用示例
regex_t re;
char *string="hello world";//待匹配表达式
regmatch_t pmatch;
...编译re
if(regexec(&re,string,1,&pmatch,0)==0)//只匹配一个表达式,返回值为0表示匹配成功
{
printf("left place:%d,right place:%d",pmatch.rm_so,pmatch.rm_eo);
}
regfree 清空结构体内容
void regfree(regex_t *preg);
清空regex_t结构体的内容,以进行重新编译利用。
本文作者:心比天高xzh
本文链接:https://www.cnblogs.com/xzh-personal-issue/p/17222425.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步