每日学习总结20240313

每日总结

20240313

1. 正则表达式

当使用C语言编写正则表达式的程序时,通常会用到以下四个函数来编译、匹配、释放正则表达式以及处理可能的错误:

  1. int regcomp(regex_t *preg, const char *regex, int cflags)
  2. int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags)
  3. void regfree(regex_t *preg)
  4. size_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size)

让我们逐一详细介绍这些函数的使用方法:

1. regcomp()
  • 功能:编译正则表达式。
  • 参数
    • preg:指向 regex_t 类型的指针,用于存储编译后的正则表达式。
    • regex:要编译的正则表达式字符串。
    • cflags:编译标志,可以是 REG_EXTENDED(扩展正则表达式)或 REG_BASIC(基本正则表达式)等,或者它们的组合。
  • 返回值:如果编译成功,则返回0;否则返回非零值,表示编译失败。
  • 示例
    regex_t regex;
    int reti = regcomp(&regex, "pattern", REG_EXTENDED);
    if (reti) {fprintf(stderr, "Could not compile regex\n");exit(EXIT_FAILURE);
    }
    
2. regexec()
  • 功能:执行正则表达式匹配。
  • 参数
    • preg:编译后的正则表达式。
    • string:要匹配的字符串。
    • nmatch:匹配数组 pmatch 的大小,即最大匹配数量。
    • pmatch:用于存储匹配位置的数组。
    • eflags:执行标志,通常为0。
  • 返回值:如果匹配成功,则返回0;如果未找到匹配,则返回 REG_NOMATCH;如果发生错误,则返回其他非零值。
  • 示例
    regmatch_t matches[MAX_MATCHES];
    reti = regexec(&regex, source, MAX_MATCHES, matches, 0);
    if (!reti) {// 匹配成功
    } else if (reti == REG_NOMATCH) {// 未找到匹配
    } else {// 匹配时发生错误
    }
    
3. regfree()
  • 功能:释放已编译的正则表达式占用的资源。

  • 参数

    • preg:编译后的正则表达式。
  • 示例

    regfree(&regex);
    
4. regerror()
  • 功能:将错误码转换为相应的错误消息。
  • 参数
    • errcode:错误码,通常是 regcomp()regexec() 返回的非零值。
    • preg:编译后的正则表达式。
    • errbuf:用于存储错误消息的缓冲区。
    • errbuf_size:错误消息缓冲区的大小。
  • 返回值:如果转换成功,则返回实际写入到 errbuf 中的字节数;否则返回0。
  • 示例
    char error_message[100];
    regerror(reti, &regex, error_message, sizeof(error_message));
    fprintf(stderr, "Regex match failed: %s\n", error_message);
    

以上是使用这四个函数的基本方法。在实际应用中,你可能需要根据具体情况添加更多的错误处理和验证逻辑。

5. 示例
#include "regular.h"
#include "stdlib.h"
#include "string.h"
c_Regular::c_Regular(const char *str_regular)
{if(regcomp(&regular_handle,str_regular,0) != 0){printf("regular compile error\n");exit(0);}this->match_result = (regmatch_t *)malloc(sizeof(regmatch_t)*MAX_MATCHES);
}c_Regular::~c_Regular()
{free(match_result);regfree(&regular_handle);
}int c_Regular::match(const char *str)
{regmatch_t match;int offset = 0;int match_count = 0;while (regexec(&regular_handle,str+offset,1,&match,0) == 0){match_result[match_count].rm_so = match.rm_so+offset;match_result[match_count].rm_eo = match.rm_eo+offset;match_count++;offset += match.rm_eo;}  return match_count;
}regmatch_t *c_Regular::getMatchResult()
{return match_result;
}
#pragma once#include <iostream>
#include <string>
#include <regex.h>#define MAX_MATCHES 10class c_Regular
{
private:regex_t regular_handle;regmatch_t *match_result;
public:c_Regular(const char *str_regular);~c_Regular();int match(const char *str);regmatch_t* getMatchResult();
};
#include <stdio.h>
#include <stdlib.h>
#include <regex.h>#include "regular.h"int main() {char source[] = "Hello, world! This is a sample string in the world";c_Regular m_regular("world");int match_num = m_regular.match(source);if(match_num){printf("match success %d\n",match_num);for (size_t i = 0; i < match_num; i++){printf("match result start: %d\n", m_regular.getMatchResult()[i].rm_so);printf("match result end: %d\n", m_regular.getMatchResult()[i].rm_eo);}}return 0;
}

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

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

相关文章

Python进程与线程开发

目录 multiprocessing模块 线程的开发 threading模块 setDaemon 死锁 线程间的通信 multiprocessing模块 运行python的时候&#xff0c;我们都是在创建并运行一个进程&#xff0c;(linux中一个进程可以fork一个子进程&#xff0c;并让这个子进程exec另外一个程序)。在pyt…

java高频面试题-高级篇

1&#xff0c;TCP可靠传输除了三次握手&#xff0c;还有其他方式保证可靠性吗&#xff1f; 序列号和确认应答&#xff1a;TCP通过序列号和确认应答机制来确保数据包的有序传输和可靠接收。数据校验和&#xff1a;TCP在每个数据包中都包含一个校验和字段&#xff0c;用于检测数…

全局路径规划算法 - 动态规划算法Python实现

参考博客&#xff1a; &#xff08;1&#xff09;算法数据结构——动态规划算法&#xff08;Dynamic Programming&#xff09;超详细总结加应用案例讲解 &#xff08;2&#xff09;【路径规划】全局路径规划算法——动态规划算法&#xff08;含python实现&#xff09; &#xf…

【上交主办·EI会议】| 2024年模式分析与机器智能国际会议 (ICPAMI 2024)

会议简介 Brief Introduction 2024年模式分析与机器智能国际会议(ICPAMI 2024) 会议时间&#xff1a;2024年8月30日-9月1日 召开地点&#xff1a;中国上海 大会官网&#xff1a;www.icpami.org ICPAMI 2024将围绕“模式分析与机器智能”的最新研究领域展开&#xff0c;为研究人…

(零)OpenOFDM接收端整体思路

一旦捕获射频信号并将其下变频至基带&#xff0c;解码管道就会启动&#xff0c;包括&#xff1a; OFDM&#xff0c;多载波调制的一种。通过频分复用实现高速串行数据的并行传输, 它具有较好的抗多径衰落的能力&#xff0c;能够支持多用户接入。 OFDM主要思想是&#xff1a;将信…

Finding the Majority Element寻找主元素

Problem Is there the majority element in sequence A [1.. n]? If so, please find it out. An integer a in A is called the majority if it appears more than [n/2] times in A.寻找元素出现次数大于n/2 Algorithm 1 —— The brute-force method 遍历序列中的每个元…

对IO流原理及、分类及IO模型的一个大概认识【Java基础题】

1.流的分类 根据操作数据单位分类&#xff1a; 字节流字符流 一般来说&#xff0c;字符流会比字节流效率更高&#xff0c;因为1个字符一般比1个字节&#xff08;8bit&#xff09;大&#xff08;it depends on 具体的编码规则&#xff0c;例如UTF-8中1个中文等于3个字节&#xf…

物联网数据驾驶舱

在信息化时代&#xff0c;数据已经成为驱动企业发展的核心动力。特别是在物联网领域&#xff0c;海量数据的实时采集、分析和监控&#xff0c;对于企业的运营决策和业务优化具有至关重要的作用。HiWoo Cloud作为领先的物联网云平台&#xff0c;其数据监控功能以“物联网数据驾驶…

UE C++ 相机视口变换(World与相机互转)

UE C 相机视口变换&#xff08;World与相机互转&#xff09; UFUNCTION(BlueprintCallable, BlueprintPure) static void ProjectSceneCaptureToWorld(const class USceneCaptureComponent2D* SceneCaptureComponent2D,const FVector2D& SceneCapturePosition, FVector&am…

Docker常见指令

1.docker search mysql &#xff1a;从docker镜像仓库搜索和mysql有关的镜像 docker search mysql 2.docker pull mysql &#xff1a;从docker仓库拉取mysql镜像 docker pull mysql 3.docker run mysql &#xff1a;启动mysql镜像 docker run mysql 4.docker ps &#xff…

【通信原理笔记】【二】随机信号分析——2.4 复随机过程

文章目录 前言一、复随机过程1.1定义1.2 复平稳过程 二、平稳带通过程分析2.1 解析过程2.2 随机过程的复包络 三、平稳序列与循环平稳总结 前言 目前为止&#xff0c;我们对实随机过程的分析方法已经基本掌握了。像复信号一样&#xff0c;我们也会有需要处理复随机过程的时候&…

工业母机5G智能制造工厂数字孪生可视化平台,推进行业数字化转型

随着科技的不断进步和工业的快速发展&#xff0c;数字化转型已成为工业领域的重要趋势。工业母机作为制造业的核心设备&#xff0c;其智能化、自动化水平的提升对于整个工业的发展具有重要意义。5G技术的广泛应用&#xff0c;为智能制造工厂提供了更为可靠、高速的网络连接&…

OSError: We couldn‘t connect to ‘https://huggingface.co‘ to load this file

想折腾bert的同学&#xff0c;应该也遇到这个问题。 一、报错信息分析 完整报错信息&#xff1a;OSError: We couldnt connect to https://huggingface.co to load this file, couldnt find it in the cached files and it looks like google/mt5-small is not the path to a…

力扣刷题Days20-151. 反转字符串中的单词(js)

目录 1,题目 2&#xff0c;代码 1&#xff0c;利用js函数 2&#xff0c;双指针 3&#xff0c;双指针加队列 3&#xff0c;学习与总结 1&#xff0c;正则表达式 / \s /&#xff1a; 2&#xff0c;结合使用 split 和正则表达式&#xff1a; 1,题目 给你一个字符串 s &am…

Docker学习之使用harbor搭建私有仓库(超详解析)

实验目的&#xff1a; 使用centos7&#xff0c;基于harbor构建私有仓库 实验步骤&#xff1a; 下载相关安装包和依赖&#xff1a; [rootlocalhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 wget //安装docker所需要的相关依赖 [rootlocalhost ~]#…

PaddleOCR识别框架解读[14] OCR数据集

文章目录 1. 文本检测1.1 PaddleOCR 文字检测数据格式1.2 公开数据集1.2.1 ICDAR 20152. 文本识别2.1 PaddleOCR 文字识别数据格式2.2 公开数据集2.2.1 ICDAR 20153. 数据存放路径这里整理了OCR中常用的公开数据集,持续更新中,欢迎各位小伙伴贡献数据集~ 1. 文本检测 1.1 P…

山景BP1048 升级狗烧写

1.打开MVAssistant_BP10xx工具&#xff0c;在芯片型号栏中选择B1X系列。 2.模式选择 选 M2.仅升级Flash SH(可选) 3 .Code数据选择SDK编译好的bin文件 4.const数据选择编译好的提示音bin文件。 5.点击升级狗下载。 6. 如下图所示&#xff0c;出现提示为正在给升级狗正在下载程…

git pull 报错: 在签出前,请清理存储库工作树

问题&#xff1a; 使用vscode 用git 拉取代码&#xff0c;提示&#xff1a;在签出前&#xff0c;请清理存储库工作树** 原因&#xff1a; git仓库上的代码和本地代码存在冲突了所以会报这个报错。 解决办法&#xff1a; ①git stash 先将本地修改存储起来 ②git pull 拉取远…

创新应用2:nnmf+DBO+K-Medoids聚类,蜣螂优化算法DBO优化K-Medoids,适合学习和发paper。

创新应用2&#xff1a;nnmfDBOK-Medoids聚类&#xff0c;蜣螂优化算法DBO优化K-Medoids&#xff0c;适合学习和发paper。 一、蜣螂优化算法 摘要&#xff1a;受蜣螂滚球、跳舞、觅食、偷窃和繁殖等行为的启发&#xff0c;提出了一种新的基于种群的优化算法(Dung Beetle Optim…

多个图片怎么变成一张动图?一个方法在线操作

如何将图片变成gif动画&#xff1f;gif动图文件体积、画面丰富兼容性也比较高。通过多张静图就能够制作一张gif动画&#xff0c;能够自己制作生动有趣的gif动态图片能更好的传达信息。只需要使用在线图片合成&#xff08;https://www.gif.cn/&#xff09;工具&#xff0c;上传j…