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 中国大陆许可协议进行许可。

posted @   心比天高xzh  阅读(124)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起