C++11之正则表达式(regex_match、regex_search、regex_replace)

2023-05-16

在C++11中引入了正则表达式。

字符规则

先来了解一下这个字符的含义吧。

字符描述
\转义字符
$匹配字符行尾
*匹配前面的子表达式任意多次
+匹配前面的子表达式一次或多次
匹配前面的子表达式零次或一次
{m}匹配确定的m次
{m,}匹配至少m次
{m,n}最少匹配m次,最大匹配n次
字符描述
.匹配任意字符
x|y匹配x或y
[xyz]字符集合,匹配包含的任意一个字符
[^xyz]匹配未包含的任意字符
[a-z]字符范围,匹配指定范围内的任意字符
[^a-z]匹配任何不在指定范围内的任意字符

头文件:#include

regex_match

全文匹配,即要求整个字符串符合匹配规则,返回true或false

匹配“四个数字-一个或俩个数字”

#include <iostream>
#include <regex>
using namespace std;
 
int main()
{
    string str;
    cin >> str;
    //\d 表示匹配数字  {4} 长度4个   \d{1,2}表示匹配数字长度为1-2
    cout << regex_match(str, regex("\\d{4}-\\d{1,2}"));
    return 0;
}

匹配邮箱 “大小写字母或数字@126/163.com”

int main()
{
    string str;
    cout << "请输入邮箱:" << endl;
    while (cin >> str)//匹配邮箱
    {
        if (true == regex_match(str, regex("[a-zA-Z0-9]+@1(26|63)\\.com")))
        {
            break;
        }
        cout << "输入错误,请重新输入:" << endl;
    }
    cout << "输入成功!" << endl;
 
    return 0;
}


regex_search

搜索匹配,即搜索字符串中存在符合规则的子字符串。

用法一:匹配单个

#include <iostream>
#include <regex>
#include <string>
using namespace std;
 
int main()
{
    string str = "hello2019-02-03word";
    smatch match;//搜索结果
    regex pattern("(\\d{4})-(\\d{1,2})-(\\d{1,2})");//搜索规则  ()表示把内容拿出来
    if (regex_search(str, match, pattern))
    {    //提取 年 月 日
        cout << "年:" << match[1] << endl;
        cout << "月:" << match[2] << endl;
        cout << "日:" << match[3] << endl;
        //下标从1开始 下标0存的是符合这个搜索规则的起始位置和结束位置
    }
 
    return 0;
}


用法二:匹配多个

#include <iostream>
#include <regex>
#include <string>
using namespace std;
 
int main()
{
    //匹配多个符合要求的字符串
    string str = "2019-08-07,2019-08-08,2019-08-09";
    smatch match;
    regex pattern("(\\d{4})-(\\d{1,2})-(\\d{1,2})");
    string::const_iterator citer = str.cbegin();
    while (regex_search(citer, str.cend(), match, pattern))//循环匹配
    {
        citer = match[0].second;
        for (size_t i = 1; i < match.size(); ++i)
        {
            cout << match[i] << " ";
        }
        cout << endl;
    }
    return 0;
}

regex_replace

替换匹配,即可以将符合匹配规则的子字符串替换为其他字符串。

将字符串中的-替换为/

#include <iostream>
#include <regex>
using namespace std;
int main()
{
    //替换不会修改原串
    cout << regex_replace("2019-08-07", regex("-"), "/") << endl;
    return 0;
}


匹配以逗号分隔的字符串(\S表示匹配任意显示字符)

在这里插入图片描述

使用正则表达式将所有信息批处理为sql的语句

在这里插入图片描述

使用正则表达式1999-10-7 修改为 10/7/1999

先匹配上,再拿小括号获取值 然后替换
在这里插入图片描述
然后就可以放在程序中

int main()
{
    string str;
    cin >> str;
    cout << regex_replace(str, regex("(\\d{4})-(\\d{1,2})-(\\d{1,2})"), "$2/$3/$1");
 
    return 0;
}

将字符串中的/删掉

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++11之正则表达式(regex_match、regex_search、regex_replace) 的相关文章

  • 每第 n 个字符分割一个字符串

    在 JavaScript 中 这就是我们如何在每 3 个字符处分割一个字符串 foobarspam match 1 3 g 我正在尝试弄清楚如何在 Java 中做到这一点 有什么指点吗 你可以这样做 String s 1234567890
  • 正则表达式贪婪匹配未按预期工作

    我有一个非常基本的正则表达式 我只是不明白为什么它不起作用 所以问题分为两部分 为什么我当前的版本不起作用以及正确的表达方式是什么 规则非常简单 必须至少包含 3 个字符 如果 字符是第一个字符 则必须至少包含 4 个字符 因此 以下情况应
  • C 中的三元搜索

    我想在 C 中对整数进行三元搜索 我已经尝试过 但它对于特定情况效果不佳 请帮我删除以下程序中的错误 我的尝试 include
  • jQuery自动完成插件-自定义突出显示功能

    我的每个项目的自动完成结果如下所示 h3 Celebrity Sweepstakes h3 p 0 episodes p 但我只想突出显示 H3 内的标题 请参阅下面的 突出显示 功能 我不知道如何更改原始正则表达式以仅替换标题内的内容 s
  • 正则表达式确保特定单词不会出现在模式中间

    我有一个正则表达式 它匹配列表中的一系列字符 但我想阻止它匹配单词 我的正则表达式是 widget w d w d 我希望它像这样匹配 widget JQYHHU 查看小部件 应该匹配 widget JQYHHU 查看小部件 应该匹配 wi
  • 如何使用正则表达式解析 OCC 选项符号?

    OCC 选项符号由 4 部分组成 标的股票或 ETF 的根代码 用空格填充至 6 个字符 到期日期 6 位数字 格式为 yymmdd 期权类型 P 或 C 用于看跌或看涨期权 执行价格 为价格 x 1000 前面填充 0 至 8 位数字 举
  • 如何使用 preg_replace 实现带条件的模板

    我正在尝试实现一个管理界面 经理可以在其中创建网站元标记形成的高级规则 我有一个函数 它采用模板并用 registry 中的值替换其中的占位符 并在需要时应用修饰符 registy array profession name gt acto
  • 如何让“grep -zoP”单独显示每个匹配项?

    我有一个此表格的文件 X this is the first match blabla X this is the second match and here we have some fluff 我想提取 X 之后和相同标记之间出现的所有
  • JavaScript 正则表达式两个标签之间的多行文本

    我编写了一个正则表达式来从 HTML 中获取字符串 但似乎多行标志不起作用 这是我的模式 我想将文本输入h1 tag var pattern div class box content 5 h1 lt lt h1 gt mi m html
  • 正则表达式 - 匹配不包含字符串的模式

    我对正则表达式很陌生 并且一直在寻找方法来做到这一点 但没有成功 给定一个字符串 我想删除以 abc 开头 以 abc 结尾且中间不包含 abc 的任何模式 如果我做 abc abc abc 它将匹配以 b 开头 以 abc 结尾并且中间包
  • Java:正则表达式 - 如何获取第一个引用文本

    作为初学者regex我相信我要问的事情太简单了 但无论如何我都会问 希望它不会打扰你帮助我 可以说我有这样的文字 你好 cool1 这个词 cool2 我想获取第一个引用的文本 即 cool1 不带 我的模式应该是什么 当使用匹配器时 我如
  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • 正则表达式允许零,只要它不是第一个数字[重复]

    这个问题在这里已经有答案了 昨天我在这里发布了一个问题正则表达式允许 null 或 1 到 9 数字 https stackoverflow com questions 40354842 regular expression allow n
  • 将两个反斜杠替换为一个反斜杠

    我想用单个反斜杠替换带有两个反斜杠的字符串 但是 替换似乎不接受 作为替换字符串 这是解释器的输出 gt gt gt import tempfile gt gt gt temp folder tempfile gettempdir gt g
  • preg_match 所有以@开头的单词?

    我对正则表达式不太确定 所以我不得不问你 如何用 PHP 判断字符串中是否包含以 开头的单词 例如我有一个像 This is for codeworxx 这样的字符串 我很抱歉 但我没有任何起点 希望你能帮忙 谢谢 萨沙 好的 谢谢你的结果
  • 如何使用 PHP 从内容中查找 URL?

    需要一个简单的 preg match 它将在内容中查找 c aspx 不带引号 如果找到 它将返回整个 url 举个例子 content div 4 a href m c aspx mt 01 9310ba801f1255e02e411d8
  • bash 支持字边界正则表达式吗?

    我试图在再次添加该单词之前匹配列表中是否存在该单词 以避免重复 我正在使用 bash 4 2 24 并尝试以下操作 foo bmyword b also foo
  • 匹配括号内任何字符的正则表达式

    尝试创建一个与括号内的任何字符匹配的正则表达式 我的正则表达式模式是这样的 preg match listanswer answer 括号内的所有字符串都是匹配模式 但问题是 当我尝试匹配例如 this word sample data 它
  • 在python中删除链表中的节点

    删除链表中的节点 这个实现有什么问题 def delete self val tmp self head prev None while tmp if val tmp data self size 1 if prev None self h
  • 为正则表达式编写解析器

    即使经过多年的编程 我很羞愧地说我从未真正完全掌握正则表达式 一般来说 当问题需要正则表达式时 我通常可以 在一堆引用语法之后 想出一个合适的正则表达式 但我发现自己越来越频繁地使用这种技术 所以 自学并理解正则表达式properly 我决

随机推荐

  • Hadoop的安装和使用

    前言 xff1a 这个Hadoop的安装和使用操作起来很容易出错 xff0c 反正各种的问题 xff0c 所以在实验过程中需要细心 重复 xff0c 有的时候是机器的问题 xff0c 还有配置的问题 下面我讲一下我遇到的坑 xff01 第3
  • 树莓派 | 解决VNC Viewer无法连接显示问题

    如果觉得本篇文章对您的学习起到帮助作用 xff0c 请 点赞 43 关注 43 评论 xff0c 留下您的足迹 x1f4aa x1f4aa x1f4aa VNC Viewer是一个很不错的远程桌面应用 xff0c 但是我们在树莓派中使用时
  • kubeadm部署k8s,coredns一直处于containercreating状态failed to find plugin “flannel“ in path [/opt/cni/bin]]

    问题 xff1a coredns始终处于containercreating状态 coredns镜像拉取不下来 xff0c 只能手动拉去之后修改tag进行解决这个问题 xff0c 具体步骤如下 xff1a span class token n
  • Docker Compose部署Springboot+Mysql项目

    声明 xff1a 本文CSDN作者原创投稿文章 xff0c 未经许可禁止任何形式的转载 xff0c 原文链接 在上一篇文章Spring Boot Maven 43 Docker打包中 xff0c 我们实现了将Springboot项目源代码一
  • 华为交换机配置LACP模式链路聚合

    文章目录 1 拓扑图2 任务描述3 SwA配置4 SwB配置5 查看配置6 普通模式链路聚合演示 https blog csdn net qq 45042462 article details 120972306 1 拓扑图 2 任务描述
  • Linux 或 树莓派 4B 使用 apt 或 pip 安装 scipy

    下面的安装过程都是在树莓派4B上安装成功的 xff0c 记录一下 xff0c 仅供参考 python 3 7 使用 apt 安装 注 xff1a 这种好像python版本只能在3 8以下 xff0c 其他版本也可尝试 sudo apt ge
  • 树莓派4B 安装 sklearn

    本文记录在树莓派4B中安装sklearn库的步骤以及安装时遇到的问题 安装步骤 sudo pip3 install numpy 61 61 1 23 5 sudo apt get install python3 numpy python3
  • navicat连接mysql报错1251的解决方法

    navicat连接mysql报错1251的解决方法 1 新安装的mysql8 xff0c 使用破解版的navicat连接的时候一直报错 xff0c 如图所示 xff1a 2 网上查找原因发现是mysql8 之前的版本中加密规则是mysql
  • 一个简单的flask实例

    Flask是python编写的轻量级的web框架 span class token comment 导入Flask类 span span class token keyword from span flask span class toke
  • 基础命令(四)

    LINUX基础命令 xff08 四 xff09 一 Tail命令 1 tail使用方法 tail命令用途是依照要求将指定的文件的最后部分输出到标准设备 xff0c 通常是终端 xff0c 通俗讲来 xff0c 就是把某个档案文件的最后几行显
  • Snipaste常用快捷键(详细总结)

    Snipaste快捷键 xff08 详细总结 xff09 全局快捷键 全局操作截屏F1贴图F3退出当前截图Esc截屏并自动复制Ctrl 43 F1隐藏 显示所有贴图Shift 43 F3切换到另一组贴图Ctrl 43 F3 鼠标贴图相关操作
  • 4位数值比较器电路

    4位数值比较器电路 题目描述 xff1a 使用门级描述方式 xff0c 实现4位数值比较器 某4位数值比较器的功能如下表 96 timescale 1ns 1ns module comparator 4 input 3 0 A input
  • Maven项目pom.xml project标签爆红解决方法

    今天在打开项目的时候 xff0c 发现了一个Maven项目的问题 xff0c 在Maven项目的pom xml文件中 xff0c project标签爆出了一个错误 parent relativePath of POM com hrp spr
  • 人工智能学习笔记五——孪生神经网络

    本文将用孪生神经网络模型 xff0c 对手写数字集minist进行相似度比较 xff0c 用的框架是keras 如果还不清楚神经网络 xff0c 可以看一下这篇文章 神经网络 caodong0225 github io MNIST 是一个手
  • Docker Swarm实战初探

    声明 xff1a 本文CSDN作者原创投稿文章 xff0c 未经许可禁止任何形式的转载 xff0c 原文链接 环境 宿主机 xff1a macOS 10 15 7虚拟机平台 xff1a Parallels Desktop 15 1 2虚拟机
  • 零基础DIY四轴飞行器超级详细保姆级教程(STM32F407ZGT6主控、WIFI图传、陀螺仪平衡、气压计/超声波定高、手机蓝牙控制等功能)

    前言 大四毕业后暑假没事做就花了一点DIY了一个四轴飞行器 xff0c 是比较大的那种F450机架 xff0c 不是那种PCB板做机架的小四轴 xff0c 因为我也是从零基础开始做的四轴 xff0c 现在就想把自己的过程写成博客分享在网上
  • shell教程

    shell 简介 Shell是一种脚本语言 xff0c 通常用于在Unix和类Unix操作系统上进行命令行交互 它是用户与操作系统内核之间的接口 xff0c 允许用户通过命令行或脚本文件来控制计算机上的操作 Shell程序通常用于执行复杂的
  • matlab画图常用函数image、imagesc、imshow区别

    1 image函数 从数组显示图像 xff0c 直接把矩阵中的值当作索引值 xff08 称为直接映射 xff09 xff0c 即数值1对应RGB1 xff0c 数值2对应于RGB2 xff0c 当小于1或大于64时表现为两端的颜色 语法1
  • 树莓派WiFi连接问题及网页打开问题的解决

    树莓派WiFi连接问题及网页打开问题的解决 一 问题描述 前一段时间在网上买了一个树莓派 4b计划做一个人脸识别的智能锁 xff0c 前一段时间整赶上期末考试 xff0c 挤时间做了做人脸识别以及人体红外感知模块 xff0c 大致能简单实现
  • C++11之正则表达式(regex_match、regex_search、regex_replace)

    在C 43 43 11中引入了正则表达式 字符规则 先来了解一下这个字符的含义吧 字符描述 转义字符 匹配字符行尾 匹配前面的子表达式任意多次 43 匹配前面的子表达式一次或多次 xff1f 匹配前面的子表达式零次或一次 m 匹配确定的m次