POSIX 规定了正则表达式的C语言库函数, 参见regex(3), 我们已经学了很多C函数得用法 读者应该具备自己看懂man手册得能力 C语言中使用正则表达式一般分为三部: 1.编译正则表达式regcomp() 2.匹配正则表达式 regexec() 3.释放正则表达式 regfree() 先来通过一个demo展示一下这三个函数的用法 效果: 下边是对这三个函数得详细解释 一. regcomp()这个函数把指定的正则表达式pattern编译成一种 特定的数据格式compiled, 这样使匹配更加有效 函数regexec()会使用这个数据在目标文件中匹配,执行成功返回0。 int regcomp(regex_t * compiled, const char* pattern, int cflags) regex_t :是一个结构体类型,用来存储编译后的正则表达式,它的成员re_nsub用来存储正则表达式中的子正则表达式的个数 子正则表达式就是用括号括起来的那部分(在上一篇 我已经给大家事例过了) pattern: 指向我们写好的正则表达式字符串的首地址 cflags: 这个参数有四个值:可以把他们用 “ | ” 连接起来 1.REG_EXTENDED :以功能更加强大的扩展正则进行匹配 2.REG_ICASE : 匹配字母是忽略大小写 3.REG_NOSUB: 不用存储匹配后的结果,只要返回是否成功匹配。如果设置该标记,那么 regexec()将忽略nmatch和 pmatch两个参数 4.REG_NEWLINE: 识别换行符 这样 “^”就可以从行的开头进行匹配 “$”就可以从行的结尾开始匹配 更多的C/C++ linux编程我会在下面的文章中陆续的,也可以关注‘奇牛学院’ 来一起讨论
#include <cstdio> #include <sys/types.h> #include <regex.h> int main(int argc, char* argv[]) { if (argc != 3) { printf("Usage: %s RegexString AND Textn", argv[0]); return 1; } const char* p_regex_str = argv[1]; const char* p_txt = argv[2]; regex_t oregex; // 编译后的结构体 int ret = 0; char emsg[1024] = { 0 }; // 保存错误信息的数组 size_t emsg_len = 0; if ((ret = regcomp(&oregex, p_regex_str, REG_EXTENDED | REG_NOSUB)) == 0) {// 编译 //成功编译 if ((ret = regexec(&oregex, p_txt, 0, NULL, 0)) == 0) {// 执行匹配不保存匹配的返回值 printf("%s matches %s n", p_txt, p_regex_str); regfree(&oregex); return 0; } } emsg_len = regerror(ret, &oregex, emsg, sizeof(emsg)); // 如果出错得到错误信息 emsg_len = emsg_len < sizeof(emsg) ? emsg_len : sizeof(emsg) - 1; emsg[emsg_len] = ' '; printf("Regex error Msg : %s n", emsg); regfree(&oregex); return 1; }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算