POSIX 规定了正则表达式的C语言库函数, 参见regex(3), 我们已经学了很多C函数得用法  读者应该具备自己看懂man手册得能力

C语言中使用正则表达式一般分为三部:

1.编译正则表达式regcomp()

2.匹配正则表达式 regexec()

3.释放正则表达式 regfree()

先来通过一个demo展示一下这三个函数的用法

#include

#include

#include

int main(int argc, char* argv[])

{

if (argc != 3) {

printf("Usage: %s RegexString AND Text\n", 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] = '\0';

printf("Regex error Msg : %s \n", emsg);

regfree(&oregex);

return 1;

}

效果:

下边是对这三个函数得详细解释

一.  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编程我会在下面的文章中陆续的分享,也可以关注‘奇牛学院’

来一起讨论

标签:regex,匹配,oregex,正则表达式,len,C语言,使用,emsg

来源: https://blog.csdn.net/qq_44065088/article/details/106852104

c语言正则表达式测试数字,C语言中使用正则表达式相关推荐

  1. python正则判断纯数字_Python 正则表达式匹配数字及字符串中的纯数字,

    Python 正则表达式匹配数字及字符串中的纯数字, Python 正则表达式匹配数字 电话号码:\d{3}-\d{8}|\d{4}-\d{7} QQ号:[1-9][0-9]{4,} 中国邮政编码:[ ...

  2. c语言程序设计 猜数字,C语言程序设计(猜数字游戏)报告.doc

    C语言程序设计(猜数字游戏)报告 <高级语言程序设计>课程设计 题目:班级:09R3 学生姓名:谢泽雄 学生学号:200931000622 指导老师:提交时间:华南农业大学信息(软件)学院 ...

  3. js 正则表达式奇偶字符串替换_Python中的正则表达式及其常用匹配函数用法简介...

    今 日 鸡 汤 此曲只应天上有,人间难得几回闻. /1 前言/ 这次给大家主要是介绍Python中的正则表达式,及其相关函数的基本使用方法,并且捎带一些正则表达式给我们带来的便利. /2 简介/ Py ...

  4. awk 使用正则表达式_如何在awk中使用正则表达式

    awk 使用正则表达式 在awk中,正则表达式(regex)允许动态和复杂的模式定义. 您不仅限于搜索简单的字符串,而且还搜索模式中的模式. 使用正则表达式匹配awk中的行的语法为: word ~ / ...

  5. linux正则表达式的使用方法,Linux中基本正则表达式

    正则表达式 的 Linux中基本正则表达式 字符匹配: .  :匹配任意单个字符 [] :匹配指定范围内的任意单个字符: [^]:匹配制定范围外任意单个字符 [:digit:] lower upper ...

  6. linux命令 正则表达式,详解Linux命令中的正则表达式

    详解Linux命令中的正则表达式 Mark Do 2017年9月19日 暂无评论 阅读 981 次 命令中的正则表达式 如果要在命令输出或文本中筛选内容时使用模糊查找,就需要使用正则表达式.正则表达式 ...

  7. shell中正则表达式详解_Shell if中的正则表达式使用详解

    由于工作需要对用户提交的数据进行验证,这是一个简单的日期正则验证实例,有需要了解的同学可参考. shell中的if语句需要做一个正则判断,查了一下语法记录之. DATEPATTERN="^[ ...

  8. C语言断点测试无法输入,VS中无法加入断点进行调试解决方案

    [ 1] 以前也遇到过同样的问题,但没有问个为什么,也没有探个毕竟.昨天调试一个DLL,添加输出信息吧,太麻烦而且不轻易定位,  但设置断点后按"F5",断点不可用,气泡提示&qu ...

  9. c语言千位数字,C语言怎样提取一个数的十位个位百位千位?

    假设那么数为x,不知道是多少位的. 你可以使用下面的表达式: 个位:x%10:十位:x/10%10:百位:x/100%10:千位:x/1000%10. C语言有以下几种取整方法: 1.直接赋值给整数变 ...

最新文章

  1. mysql锁总结知乎_Mysql悲观锁乐观锁区别与使用场景
  2. Maven国内阿里镜像(Maven下载慢的解决方法)
  3. 自学python找工作工资-大四应届毕业生,学了两个月Python,找工作感觉好难啊?...
  4. 默认网关及route print
  5. eclipse安装阿里规范模板
  6. P2579,jzoj2288-[ZJOI2005]沼泽鳄鱼【矩阵乘法】
  7. js 判断是ie浏览器
  8. 自动采集小说程序源码
  9. ros中的电机速度控制_ROS与RACECAR教程-电调控制
  10. nmos导通流向_MOS管知识详细说明!结构,原理,技术参数详解,一定要进来看下...
  11. 油价上涨后,「两轮电动车」还是没有找到正确的出路?
  12. 敞开拥抱中国,荷兰光刻机巨头ASML丝毫不受“大火”影响
  13. php 调试 打印错误
  14. 医疗——医院信息管理系统
  15. 您该怎样科学地准备过年?
  16. RPO和RTO是什么?
  17. JavaScript—进阶篇
  18. 在安卓手机上安装Linux子系统
  19. 达梦数据库的备份与恢复
  20. 互联网公司招聘黑话大全

热门文章

  1. XSRF 的攻击与防范
  2. 倒车喇叭语音ic芯片
  3. Kafka、RabbitMQ、RocketMQ 之间的区别是什么 ?
  4. vue.congfig.js配置less全局主题等样式变量
  5. 【精华帖】单火线开关设计详解
  6. DrawerLayout 官方文档
  7. 【报告分享】2021颜值经济新消费报告-CBNDATA(附下载)
  8. 2020第五空间 hate-php rosb 交流
  9. leakage漏电流:基于COMS管工作原理的漏电流分析
  10. 笔记本蓝牙搜索不到设备解决方案