当前位置: 首页 > news >正文

c++正则表达式及其使用,超级详细

文章目录

  • 概述
  • 正则表达式语法
  • 正则表达式操作
    • std::regex_match
    • std::regex_replace
    • std::regex_search
  • 实例
    • 匹配邮箱
    • 替换 HTML 标签
    • 搜索 URL
  • 总结

概述

正则表达式是一种用于匹配字符串的工具,可以在文本中查找特定的模式,并且可以快速地对字符串进行搜索和处理。C++ 11 引入了正则表达式标准库,使得 C++ 开发者可以轻松地利用正则表达式的强大功能。

本篇博文将为你介绍 C++ 正则表达式的基础知识,包括如何定义正则表达式,如何进行匹配和替换等操作。同时,我们将提供大量的实例来帮助您深入理解。

正则表达式语法

正则表达式是由一系列字符和特殊字符组成的模式,用于描述一类字符串。正则表达式的语法非常灵活,不同的字符和组合可以匹配不同的字符串。下面是一些常见的正则表达式语法:

  • 字符:普通字符表示匹配自身,例如匹配字母 a 就是一个普通字符 a。
  • 字符组:字符组用 [] 表示,可以匹配其中任意一个字符。例如匹配小写字母就是一个字符组 [a-z]。
  • 量词:量词表示匹配次数,例如匹配一个数字可以用量词 \d 表示,其中 \d 表示匹配一个数字字符,+ 表示匹配一次或多次。
  • 边界:边界用于限制匹配范围,例如匹配以数字开头的字符串可以使用边界 ^ 表示,表示匹配以开头的字符。
  • 特殊字符:一些特殊字符用于表示空格、换行、制表符等不可见字符。例如表示换行符的字符是 \n。

正则表达式操作

C++ 的正则表达式标准库提供了多种操作,可以对字符串进行匹配、替换、搜索等操作。下面是一些常见的操作:

std::regex_match

std::regex_match 函数用于对一个字符串进行匹配,判断该字符串是否符合指定的正则表达式。该函数的语法如下:

bool std::regex_match(const std::string& str, const std::regex& re);

其中 str 表示待匹配的字符串,re 表示正则表达式。函数返回一个布尔值,表示匹配结果。例如下面的代码可以用来判断字符串 s 是否是一个数字:

#include <regex>
#include <iostream>
using namespace std;int main() {string s = "123";regex re("\\d+");if (regex_match(s, re)) {cout << "Match!" << endl;} else {cout << "Not match!" << endl;}return 0;
}

std::regex_replace

std::regex_replace函数用于对一个字符串进行替换,将符合指定正则表达式的部分替换为指定的字符串。该函数的语法如下:

std::string std::regex_replace(const std::string& str, const std::regex& re, const std::string& replacement);

其中 str 表示待替换的字符串,re 表示正则表达式,replacement 表示替换字符串。函数返回一个新的字符串,表示替换后的结果。例如下面的代码可以用来将字符串中的数字替换为 ***:


#include <regex>
#include <iostream>
using namespace std;int main() {string s = "123 abc 456 def";regex re("\\d+");string result = regex_replace(s, re, "***");cout << result << endl;  // 输出 "*** abc *** def"return 0;
}

std::regex_search

std::regex_search 函数用于在一个字符串中搜索符合指定正则表达式的子字符串。该函数的语法如下:

bool std::regex_search(const std::string& str, const std::regex& re);

其中 str 表示待搜索的字符串,re 表示正则表达式。函数返回一个布尔值,表示搜索结果。例如下面的代码可以用来搜索字符串 s 中是否包含数字:

#include <regex>
#include <iostream>
using namespace std;int main() {string s = "123 abc";regex re("\\d+");if (regex_search(s, re)) {cout << "Match!" << endl;} else {cout << "Not match!" << endl;}return 0;
}

实例

下面提供一些常见的实例,帮助您更深入地理解 C++ 正则表达式的使用:

匹配邮箱


#include <regex>
#include <iostream>
using namespace std;int main() {string email = "test@example.com";regex re("[\\w.-]+@[\\w.-]+\\.\\w+");if (regex_match(email, re)) {cout << "Valid email!" << endl;} else {cout << "Invalid email!" << endl;}return 0;
}

替换 HTML 标签


#include <regex>
#include <iostream>
using namespace std;int main() {string html = "<p>Hello, world!</p>";regex re("<[^>]*>");string result = regex_replace(html, re, "");cout << result << endl;  // 输出 "Hello, world!"return 0;
}

搜索 URL

#include <regex>
#include <iostream>
using namespace std;int main() {string text = "Visit our website at http://example.com";regex re("https?://[\\w./]+");smatch match;if (regex_search(text, match, re)) {cout << "URL found: " << match[0] << endl;} else {cout << "URL not found!" << endl;}return 0;
}

总结

本篇博文介绍了 C++ 正则表达式的基础知识,包括正则表达式的语法、C++ 标准库中的正则表达式类以及常见的正则表达式函数。正则表达式是一种十分强大的字符串处理工具,它可以用来检查字符串是否符合某种规律、提取字符串中的有用信息以及替换字符串中的部分内容等等。

在使用正则表达式时,我们需要注意正则表达式的语法和函数的使用方法。有些正则表达式的语法在 C++ 中需要进行转义,例如 .、\ 和 + 等字符。同时,C++ 标准库中的正则表达式类提供了一些函数,例如 std::regex_match、std::regex_replace 和 std::regex_search 等,可以用来进行字符串的匹配、替换和搜索等操作。

在实际使用中,我们可以根据具体的需求编写不同的正则表达式来实现字符串处理的功能。例如,我们可以使用正则表达式来匹配邮箱、替换 HTML 标签和搜索 URL 等等。正则表达式在现代编程语言中得到了广泛的应用,对于字符串处理的需求,它是一个十分重要的工具。

http://www.lryc.cn/news/60496.html

相关文章:

  • 【LeetCode: 剑指 Offer II 099. 最小路径之和 | 暴力递归 | DFS =>记忆化搜索=>动态规划】
  • Python OpenCV 计算机视觉:6~7
  • LabView中数组的使用2-1
  • Android 10.0 系统systemui下拉通知栏的通知布局相关源码分析
  • 研读Rust圣经解析——Rust learn-3(变量与可变性,数据类型)
  • 接口的多继承多实现
  • 腾讯-iOS面试题-答案
  • SQL Server内存架构
  • 有哪些功能强大,但是很小众的Python库呢?
  • SpringBoot设计了哪些可拓展的机制?
  • Layer组件多个iframe弹出层打开与关闭及参数传递
  • BearPi环境搭建及基本使用
  • 算法笔记-换根DP
  • LeetCode 785. Is Graph Bipartite【DFS,二分图】中等
  • 【微信小程序】-- 分包 - 独立分包 分包预下载(四十五)
  • 2.3 连续性随机变量
  • 【DES详解】(一)处理input block(64 bits)
  • redis笔记——三种特殊的数据结构
  • 网络安全之编码加密算法
  • mp4视频无法播放的解决方法
  • 搭建Mysql
  • 气传导和骨传导耳机哪个好?简单科普这两种蓝牙耳机
  • 浅尝GoWeb开发之Gin框架
  • 工程行业管理系统-专业的工程管理软件-提供一站式服务
  • 目标检测YOLO系列-YOLOV7运行步骤(推理、训练全过程)
  • Spring Boot + Spring Security基础入门教程
  • MySQL数据库,表的增删改查详细讲解
  • SpringCloud-Gateway实现网关
  • Redis 如何配置读写分离架构(主从复制)?
  • 代码随想录二刷day05 | 哈希表之242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和