「C/C++」C/C++搭建程序框架

news2025/1/15 12:55:49

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「C/C++」C/C++程序设计
📚全部专栏
「UG/NX」NX二次开发「UG/NX」BlockUI集合
「VS」Visual Studio「QT」QT5程序设计
「C/C++」C/C++程序设计「Win」Windows程序设计
「DSA」数据结构与算法「File」数据文件格式

目录

  • 术语介绍
  • 匹配代码
    • 常用标识
    • 转义字符
    • 贪婪与懒惰
  • 常用匹配举例
    • 1. 验证输入数据的格式:
    • 2. 提取文本中的特定信息:
    • 3. 替换文本中的特定模式:
    • 4. 分割文本为不同的单词或句子:
  • C++标准库#include<regex\>​
    • 1. `std::regex`
    • 2. `std::regex_match`
    • 3. `std::regex_search`
    • 4. `std::regex_replace`
    • 5. `std::sregex_iterator`
  • 参考文献


术语介绍

正则表达式说明:

  • 正则表达式:是一种用于描述和匹配字符串模式的工具。

正则表达式功能:

  • 模式匹配:检查一个字符串是否与指定模式匹配。
  • 字符串搜索和替换:在一个文本中搜索并替换符合规则的字符序列。
  • 字符串分割:根据模式将字符串切分成多个部分。
  • 校验输入:对用户输入进行验证,以确保其符合特定格式要求。
  • 数据提取:从字符串中抽取特定的信息、数据或属性。

在线正则表达式测试工具【英文】:https://regex101.com/
在线正则表达式测试工具【中文】:https://regexr-cn.com/
在线正则表达式练习工具:https://www.codejiaonang.com/#/courses
在线正则表达式说明工具:https://r2coding.com

匹配代码

常用标识

字符标识含义
.除换行符外的任意字符
*前面的子表达式零次或多次
+前面的子表达式一次或多次
?前面的子表达式零次或一次
|或运算符。并集,可以匹配符号前后的表达式。
[]匹配方括号中列举的任意一个字符
[^]匹配除了方括号中列举的任意一个字符以外的任意字符
()捕获组,用于分组和提取匹配结果
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次
\d任意一个数字字符(0-9)
\D任意一个非数字字符
\w任意一个单词字符(字母、数字、“_”)
\W任意一个非单词字符
\s任意一个空白字符(空格、制表符、换行符等)
\S任意一个非空白字符
\b单词边界
\B非单词边界
^行的开头(或在 [] 中表示取反)
$行的结尾
\转义字符,用于转义特殊字符

转义字符

转义字符说明
\n换行
\t横向跳格(制表符)
\v竖向跳格
\b退格
\r回车
\f走纸换页
\\反斜杠字符 \
\'单引号字符
\a鸣玲
\ddd1到3位八进制数所代表的字符
​​\xhh以十六进制表示的字符(例如,​\x41​ 表示大写字母 ‘A’)
​​\uhhhh​ 以十六进制表示的 Unicode 字符(例如,​\u0041​ 表示大写字母 ‘A’)
​​\Uhhhhhhhh以十六进制表示的长形式 Unicode 字符

贪婪与懒惰

代码说明
*?重复任意次,但尽可能少重复
+?重复1次或更多次,但尽可能少重复
??重复0次或1次,但尽可能少重复
{n,m}?重复n到m次,但尽可能少重复
{n,}?重复n次以上,但尽可能少重复

常用匹配举例

1. 验证输入数据的格式:

  • 邮箱地址:^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
  • 网络地址:^(?:https?:\/\/)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$
  • 手机号码:/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/gm
  • 身份证号码:^[1-9]\\d{5}(18|19|20)\\d{2}(0\\d|10|11|12)([0-2]\\d|30|31)\\d{3}[0-9Xx]$

2. 提取文本中的特定信息:

  • 匹配HTML标签中的内容:<([a-zA-Z]+)(?:\\s+[a-zA-Z]+=\"[^\"]*\")*>\\s*([\\w\\W]*?)\\s*</\\1>
  • 匹配URL中的域名:(https?|ftp)://([\\w_-]+(\\.[\\w_-]+)+)(:[0-9]+)?(/\\S*)?

3. 替换文本中的特定模式:

  • 将日期格式从"YYYY/MM/DD"替换为"DD-MM-YYYY":(\d{4})/(\d{2})/(\d{2}) 替换为 \3-\2-\1
  • 删除多余的连续空白字符:\s+ 替换为空格

4. 分割文本为不同的单词或句子:

  • 以逗号和空格分割句子:\\s*,\\s*

C++标准库#include<regex>​

所属头文件:#include<regex>​

组件名称作用
std::regex表示一个正则表达式的对象
std::regex_match将一个字符序列与正则表达式进行完全匹配
std::regex_search在字符序列中搜索满足正则表达式的第一个子序列
std::regex_replace使用给定的格式替换字符串中满足正则表达式的部分
std::sregex_iterator迭代器适配器,用于遍历字符串中所有与正则表达式匹配的子序列
std::smatch存储与正则表达式匹配的结果的容器类
std::ssub_match存储在字符串中与子表达式匹配的结果的容器类

1. std::regex

#include <iostream>
#include <regex>

int main() {
    std::string input = "Hello, World!";
    std::regex pattern("Hello");

    if (std::regex_match(input, pattern)) {
        std::cout << "Pattern matched." << std::endl;
    } else {
        std::cout << "Pattern not matched." << std::endl;
    }

    return 0;
}

2. std::regex_match

#include <iostream>
#include <regex>

int main() {
    std::string input = "1234";
    std::regex pattern("\\d+");

    if (std::regex_match(input, pattern)) {
        std::cout << "Input string matches the pattern." << std::endl;
    } else {
        std::cout << "Input string does not match the pattern." << std::endl;
    }

    return 0;
}

3. std::regex_search

#include <iostream>
#include <regex>

int main() {
    std::string input = "Hello, World!";
    std::regex pattern("World");

    std::smatch match;
    if (std::regex_search(input, match, pattern)) {
        std::cout << "Pattern found: " << match.str() << std::endl;
    } else {
        std::cout << "Pattern not found." << std::endl;
    }

    return 0;
}

4. std::regex_replace

#include <iostream>
#include <regex>

int main() {
    std::string input = "Hello, World!";
    std::regex pattern("World");

    std::string replaced = std::regex_replace(input, pattern, "Universe");
    std::cout << "Replaced string: " << replaced << std::endl;

    return 0;
}

5. std::sregex_iterator

#include <iostream>
#include <regex>

int main() {
    std::string input = "Hello, 2021! This is a sample string with numbers 1234.";

    std::regex pattern("\\d+");
    std::sregex_iterator iter(input.begin(), input.end(), pattern);
    std::sregex_iterator end;

    std::cout << "Matches found: ";
    for (; iter != end; ++iter) {
        std::cout << iter->str() << " ";
    }
    std::cout << std::endl;

    return 0;
}

参考文献

正则表达式30分钟入门教程——作者:deerchao
微软.NET正则表达式

在这里插入图片描述

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

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

相关文章

【javaweb】学习日记Day1 - HTML CSS入门

目录 一、图片标签 ① 绝对路径 1.绝对磁盘路径 2.绝对网络路径 ② 相对路径 &#xff08;推荐&#xff09; 二、标题标签 三、水平线标签 四、标题样式 1、CSS引入样式 ① 行内样式 ② 内嵌样式 ③ 外嵌样式 2、CSS选择器 ① 元素选择器 ② id选择器 ③…

74HC595驱动7x11点阵屏(LED-7X11-JHM)DEMO

起因 由于我之前做了一个点阵时钟 &#xff0c;但是无奈LED点阵屏价格比较贵&#xff0c;所以想找一个价格较为便宜的点阵来做便宜一点的点阵方案&#xff0c;再淘宝上看到有那种五毛钱一个的7x11的LED点阵&#xff0c;所以就想着试试搞一下这种点阵屏&#xff0c;这个由于是7…

Ajax 笔记(一)—— Ajax 入门

笔记目录 1. Ajax 入门1.1 Ajax 概念1.2 axios 使用1.2.1 URL1.2.2 URL 查询参数1.2.3 小案例-查询地区列表1.2.4 常用请求方法和数据提交1.2.5 错误处理 1.3 HTTP 协议1.3.1 请求报文1.3.2 响应报文 1.4 接口文档1.5 案例1.5.1 用户登录&#xff08;主要业务&#xff09;1.5.2…

SpringBoot案例-部门管理-根据id查询

目录 根据页面原型&#xff0c;明确需求 查看接口文档 思路分析 接口功能实现 控制层&#xff08;Controller类&#xff09; 业务层&#xff08;Service类&#xff09; 业务类 业务实现类 持久层&#xff08;Mapper类&#xff09; 接口测试 前后端联调 根据页面原型&…

JlinkV8 - 8步修复Jlink固件

现象 用着用着Jlink设备可以检测到&#xff0c;但是MDK检测不到设备序列号&#xff0c;换一个Jlink即可正常识别与烧录&#xff0c;很大概率是Jlink固件丢了&#xff0c;我用的山寨版本&#xff0c;市面基本是山寨版本 解决办法 1、查看Jlink的芯片型号&#xff0c;比如我打开…

练习第30天

选择 多线程可以提高CPU利用率 不能提高内存的利用率 A B A C A B A B C 编程 最难的问题最难的问题__牛客网 #include <iostream> #include <string> #include <unordered_map> using namespace std;//给个字符串翻译出来 // int main() {unordered_…

怎么开通Tik Tok海外娱乐公会呢?

TikTok作为全球知名的社交媒体平台&#xff0c;吸引了数亿用户的关注和参与。许多公司和个人渴望通过开通TikTok直播公会进入这一领域&#xff0c;以展示自己的创造力和吸引更多粉丝。然而&#xff0c;成为TikTok直播公会并非易事&#xff0c;需要满足一定的门槛和申请找cmxyci…

小体积,大能量!邂逅飞凌OKMX6ULL开发板

机缘巧合参加了飞凌嵌入式的试用活动&#xff0c;也很幸运被任命为新品体验官&#xff0c;那么看下是哪一款核心板和底板吧。 →核心板&#xff1a;FETMX6ULL-C核心板 FETMX6ULL-C核心板采用NXP i.MX6ULL处理器开发设计&#xff0c;采用低功耗的ARM Cortex-A7架构&#xff0c…

MySQL语句总和之MySQL数据库与表结构操作

目录 1、启动MySQL服务 2、进入MySQL数据库 3、退出数据库 4、查看MySQL数据库所有库 5、创建、删除、使用、查看所处库操作 6、创建表 7、查看表结构 8、表结构操作 1&#xff09;修改表名 2&#xff09;自增长操作 3)添加一个address字段放在Phone字段后面 4)添加…

题34(在排序数组中查找元素的第一个和最后一个位置)

使用二分查找 此题的关键在于找到左端点和右端点 找中点 两种操作 左端点用第一个方式 右端点用第二种&#xff0c;避免死循环 二分模板 class Solution { public:vector<int> searchRange(vector<int>& nums, int target) {if(nums.size()0) return{-…

项目管理师基础之项目管理计划和项目文件

项目管理过程中&#xff0c;会使用并产生两大类文件&#xff1a;项目管理计划和项目文件。内容一般如下&#xff1a; 整个项目生命周期需要收集、分析和转化大量的数据。从各个过程收集项目数据&#xff0c;并在项目团队内共享。在各个过程中所收集的数据经过结合相关背景的分…

(6)所有角色数据分析-6

http://t.csdn.cn/KrurEhttp://t.csdn.cn/KrurE &#xff08;5&#xff09;中的页面&#xff0c;倾向于向用户展示所有数据&#xff0c;但却没有对数据进行比较、分析&#xff0c;用户不能直观的感受到各种数据之间的关系与变化幅度&#xff0c;所以&#xff0c;下面将向用户提…

强大的公式编辑器 —— MathType最新版本安装与使用

强大的公式编辑器 —— MathType最新版本安装与使用 由于使用了很长时间的机械硬盘出现坏道&#xff0c;安装在其中的MathType6.9&#xff08;精简版&#xff09;也没办法使用了&#xff0c;本来想安装个高版本的MathType&#xff0c;比如MathType7.4&#xff0c;但在网上苦苦…

HTTP请求性能分析 - 简单

使用随手可得的工具&#xff0c;尽量少的前置要求&#xff0c;来完成任务。 0. 目录 1. 前言2. 分析工具2.1 基于Chrome DevTools 的Timing2.1.1 关于Network标签页下的Timing部分2.1.2 一些注意项 2.2 基于Curl 命令 3. 剩下的工作 1. 前言 对于业务开发选手而言&#xff0c;…

阿里云服务器搭建Magento电子商务网站图文教程

本文阿里云百科分享使用阿里云服务器手动搭建Magento电子商务网站全流程&#xff0c;Magento是一款开源电商网站框架&#xff0c;其丰富的模块化架构体系及拓展功能可为大中型站点提供解决方案。Magento使用PHP开发&#xff0c;支持版本范围从PHP 5.6到PHP 7.1&#xff0c;并使…

建设全球研发中心城市,长沙的“破”与“立”

文 | 智能相对论 作者 | 范柔丝 顺应全球科技革命和产业变革浪潮&#xff0c;响应国家和全省发展战略&#xff0c;向全球研发中心城市见可而进的长沙&#xff0c;落地动作不断。 省委书记沈晓明在2023互联网岳麓峰会上前瞻性地为长沙擘画“全球研发中心城市”的蓝图后&#…

每期一个小窍门: go 的小接口多组合思想

go中的接口更加灵活 通过隐式约定实现 类似奥卡姆剃刀 尽量把小功能抽象成为一个独立接口复杂接口最好由简单子功能接口组合而来传参如无必要, 勿扩大接口范围, 保持简单

AI绘画(2)stable diffusion绘制人像

使用AI绘画&#xff0c;看起来很简单&#xff0c;但要画好就很难&#xff0c;又是另一回事。使用AI绘画&#xff0c;是有着技巧和窍门。 现在&#xff0c;我们开始stable diffusion的一个心得分享。今天教程的主题是画人物。 由于是stable diffusion的输入文本是英文&#xff…

GB/T28181设备接入端如何应用到数字城管场景?

什么是数字城管&#xff1f; 数字城管&#xff0c;又称“数字化城市管理”或“智慧城管”&#xff0c;是一种采用信息化手段和移动通信技术来处理、分析和管理整个城市的所有城管部件和城管事件信息&#xff0c;促进城市管理现代化的信息化措施。 数字城管通过建立城市管理信息…

Ubantu安装Docker(完整详细)

先在官网上查看对应的版本:官网 然后根据官方文档一步一步跟着操作即可 必要准备 要成功安装Docker Desktop&#xff0c;必须&#xff1a; 满足系统要求 拥有64位版本的Ubuntu Jammy Jellyfish 22.04&#xff08;LTS&#xff09;或Ubuntu Impish Indri 21.10。 Docker Deskto…