【POSIX】使用regex进行正则匹配

正则表达式是很关键的一个工具,各种编程语言中均通用,务必掌握

给出Linuxman page给出的一个示例:

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <regex.h>#define ARRAY_SIZE(arr) (sizeof((arr)) / sizeof((arr)[0]))static const char *const str ="1) John Driverhacker;\n2) John Doe;\n3) John Foo;\n";
static const char *const re = "John.*o";int main(void)
{static const char *s = str;regex_t regex;regmatch_t pmatch[1];regoff_t off, len;if (regcomp(&regex, re, REG_NEWLINE))exit(EXIT_FAILURE);printf("String = \"%s\"\n", str);printf("Matches:\n");for (unsigned int i = 0;; i++){if (regexec(&regex, s, ARRAY_SIZE(pmatch), pmatch, 0))break;off = pmatch[0].rm_so + (s - str);len = pmatch[0].rm_eo - pmatch[0].rm_so;printf("#%zu:\n", i);printf("offset = %jd; length = %jd\n", (intmax_t)off,(intmax_t)len);printf("substring = \"%.*s\"\n", len, s + pmatch[0].rm_so);s += pmatch[0].rm_eo;}exit(EXIT_SUCCESS);
}

执行:

./demo           
String = "1) John Driverhacker;
2) John Doe;
3) John Foo;
"
Matches:
#0:
offset = 25; length = 7
substring = "John Do"
#1:
offset = 38; length = 8
substring = "John Foo"

然后依样画葫芦,也写一个动态生成正则匹配的工具

#include <iostream>
#include <string.h>
#include <unistd.h>
#include <regex.h>int main(int argc, char *argv[])
{if (argc != 2){std::cerr << "./regexec <reg-str>" << std::endl;return 0;}std::cout << "reg pattern: " << argv[1] << std::endl;char msgbuf[128];regex_t r{};int err = regcomp(&r, argv[1], REG_NEWLINE);if (err != 0){std::cout << "err code: " << err << std::endl;size_t s = regerror(err, &r, msgbuf, sizeof(msgbuf));write(STDERR_FILENO, msgbuf, s);exit(-1);}std::string str;for (;;){std::cout << "请输入待匹配的字符串: ";std::getline(std::cin, str);std::cout << "输入是: " << str.c_str() << std::endl;int want_len = 1;regmatch_t want[1];err = regexec(&r, str.c_str(), want_len, want, 0);if (err == 0){printf("The string matches the regular expression.\n");}else if (err == REG_NOMATCH){printf("The string does not match the regular expression.\n");}else{regerror(err, &r, msgbuf, sizeof(msgbuf));fprintf(stderr, "Regex matching failed: %s\n", msgbuf);exit(-1);}}regfree(&r);return 0;
}

执行:

./regexec "[0-9].*" 
reg pattern: [0-9].*
请输入待匹配的字符串: 123
输入是: 123
The string matches the regular expression.
请输入待匹配的字符串: 12
输入是: 12
The string matches the regular expression.
请输入待匹配的字符串: addd
输入是: addd
The string does not match the regular expression.
请输入待匹配的字符串: 12sfsfs
输入是: 12sfsfs
The string matches the regular expression.
请输入待匹配的字符串: sdfs
输入是: sdfs
The string does not match the regular expression.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/847225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring的@Async注解及其用途

Spring 的 Async 注解是 Spring Framework 4.2 版本引入的功能&#xff0c;它用于支持异步方法执行。当一个方法标注了 Async&#xff0c;Spring 会在一个单独的线程中调用该方法&#xff0c;从而不会阻塞主线程的执行。 Async 注解的用途&#xff1a; 提高性能&#xff1a;通…

uniapp3步使用goeasy完成本地消息推送

1.注册登录goeasy&#xff0c;下载测试demo 2.替换demo中main.js中的key 3.打包一个H5&#xff0c;一个自定义基座。 h5发消息&#xff0c;app收消息&#xff0c;然后创建消息通知就好了。记得打开app的消息通知 demo很简单&#xff0c;demo都跑通了&#xff0c;在搬到自己项目…

NAVICAT从MYSQL链接到ORCAL数据库

1、工具-选线 2、环境&#xff0c;将原有的mysql的oci.dll文件改为oracle的 3、新建连接 填写对应数据

axios拦截器

定义 在客户端通过axios发送请求或响应被 then 或 catch 处理前拦截它们。顾名思义&#xff0c;在axios发送请求之前在请求数据内添加条件或者验证&#xff0c;并通过函数返回错误。在收到服务器的响应数据进行返回&#xff0c;遇到无法响应的情况在catch之前拦截错误信息进行…

国产高边驱动HD70202Q替换英飞凌BTS7040-2

高边驱动也称之为高边开关&#xff0c;主要用于车内负载的驱动与开关&#xff0c;并对负载进行保护和诊断。高边驱动以高可靠性、灵活性、低功耗以及小型轻量等特点&#xff0c;正逐渐替代传统的保险丝、继电器等方案。 RAMSUN提供的HD70202Q车规级双通道智能高边驱动的输入控…

迈普 多业务融合网关 send_order.cgi 前台RCE漏洞复现

0x01 产品简介 迈普多业务融合网关是迈普通信技术股份有限公司自主研发的多业务无线融合网关&#xff0c;拥有融合网关功能、精准流控、上网行为管理、智能选路…等强大功能&#xff0c;并支持对接迈普云平台&#xff0c;实现远程运维和集中管理&#xff0c;很好的满足了医疗/…

python API自动化(Jsonpath断言、接口关联及加密处理)

JsonPath应用及断言 重要 自动化要解决的核心问题 &#xff1a;进行自动测试-自动校验&#xff08;进行结果的校验 主要能够通过这个方式提取数据业务场景&#xff1a;断言 、接口关联 {key:value}网址&#xff1a;附&#xff1a;在线解析 JSONPath解析器 - 一个工具箱 - 好用…

OSI/RM的网络体系结构

下面简要说明OSI/RM七层协议的主要功能。 1&#xff09;应用层 这是osi的最高层。这一层的协议直接为端用户服务&#xff0c;提供分布式处理环境。应用层管理开放系统的互联&#xff0c;包括系统的启动、维持和中止&#xff0c;并保持应用进程间建立连接所需的数据记录&#…

python-web应用程序-Django数据库-数据库表设计

python-web应用程序-Django数据库-数据库表设计 在models中创建一个类会自动对数据库进行管理&#xff0c;那么如何用类的声明来实现数据库表的设计呢&#xff1f; from django.db import models# Create your models here. class Department(models.Model):title models.Ch…

2024年【N2观光车和观光列车司机】考试报名及N2观光车和观光列车司机最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 N2观光车和观光列车司机考试报名考前必练&#xff01;安全生产模拟考试一点通每个月更新N2观光车和观光列车司机最新解析题目及答案&#xff01;多做几遍&#xff0c;其实通过N2观光车和观光列车司机很简单。 1、【多…

delphi 语法3

简单类型共包括有六种类型&#xff1a;整型、字符型、布尔型、枚举类型、子界类型、实型。 除实型之外&#xff0c;其它五种类中每一种类型的值域(所有合法的值的集合)中值的数目有限 且其中的值排列有序&#xff0c;其每个值在值域中均有一个序数 n&#xff0c;其前后两个值的…

速盾:怎么查询cdn真实ip?

CDN&#xff08;内容分发网络&#xff09;是一种用于加速网站内容传输的技术&#xff0c;通过在全球各地建立分布式节点服务器来提供更快速的内容传输和更好的用户体验。然而&#xff0c;由于CDN的特殊设计&#xff0c;使得查询CDN真实IP地址变得相对困难。本文将介绍一些常见的…

使用system verilog进行流水灯和VGA打印字符

使用system verilog进行流水灯和VGA打印字符 目录 **使用system verilog进行流水灯和VGA打印字符****system verilog的优点****VGA程序编写**VGA 控制器模块字符生成模块顶层模块测试基准程序**效果** **流水灯程序设计****效果** **总结** system verilog的优点 面向对象编程…

618购物狂欢,好物榜单揭晓!一文了解那些值得入手的数码产品

随着618购物狂欢节的脚步渐近&#xff0c;想必各位消费者已经开始规划自己的购物清单了。毕竟&#xff0c;这样的年度大促是难得的省钱良机&#xff0c;许多平日里心仪已久的大牌商品和高价宝贝都在等待着这一天的优惠。错过了618&#xff0c;恐怕又要等上半年才能遇到如此诱人…

如何制作不限扫描次数的视频二维码?1分钟教程

不可否认的是&#xff0c;视频二维码正在各行各业发挥重要作用。不论是在线上宣传、线下活动&#xff0c;还是产品包装、展览展会上&#xff0c;只需要扫描视频二维码&#xff0c;就能在手机端获得专业的视频教程、查看品牌宣传视频、了解活动流程、快速获取关键信息等&#xf…

图形学初识--深度测试

文章目录 前言正文为什么要有深度测试&#xff1f;画家算法循环遮挡 深度测试当代最常见实现方式&#xff1f;总述什么是z-buffer呢&#xff1f;z-buffer从哪来呢&#xff1f;如何利用z-buffer实现深度测试&#xff1f;举个例子 结尾&#xff1a;喜欢的小伙伴点点关注赞哦! 前言…

【计算机毕设】基于SpringBoot的图书进销存管理系统设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 本研究旨在设计并实现一款基于SpringBoot的图书进销存管理系统&#xff0c;旨在解决图书馆或书店在图书采购、销售和库存管理等方面的问题&#xff…

新手开视频号小店需要做什么准备?只需做好这几个准备,缺一不可

大家好&#xff0c;我是电商花花。 现在视频号小店发展的这么红火&#xff0c;很多人开始在视频号上开始开店&#xff0c;做电商。 目前视频号小店随着流量的市场的保证&#xff0c;不少商家也想通过视频号小店来进行变现。 但是&#xff0c;我们作为一个新手&#xff0c;想…

【ARM 嵌入式 编译系列 2.7 -- GCC 编译优化参数 -fvar-tracking-assignments 详细介绍】

文章目录 -fvar-tracking-assignments作用使用场景怎么使用注意 -fvar-tracking-assignments -fvar-tracking-assignments 是 GCC&#xff08;GNU Compiler Collection&#xff0c;GNU 编译器套件&#xff09;中的一个编译参数&#xff0c;用于优化调试体验。这个选项使得编译…