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

C++正则表达式

Python正则表达式

之前写过一篇关于 Python 正则表达式的 blog ,链接:(392条消息) Python正则表达式(一看就懂)_YR_T的博客-CSDN博客_python正则表达式

正则表达式是什么

简单说,它就是用来匹配字符串,主要用在 Python 爬虫上,其实 C++ 也可以做爬虫,所以也会用到正则表达式,但是主要的使用还是在实际开发里。

进入正题,正则表达式用法

头文件

首先,我们要引入头文件,头文件名是 regex 。

#include<regex>

regex_match

这些函数和 Python 里的函数差不多,这个函数可以再你要判断目标字符串的全部是不是和你的要求一样。

用于匹配的函数是 std::regex_match

bool regex_match(string s,regex pattern)
bool regex_match(string s,smatch result,regex pattern)
bool regex_match(s.cbegin()+i,s.cend(),smatch result,regex pattern)

字符串 s 是要匹配的字符串,pattern 是匹配规则,也就是我上面那张图

定义方法如下

regex pattern("规则");

\d用法

\d表示 0~9 的任意一个数字

比如 abc\\d 表示匹配 abc 后面加 0-9 的任意一个数字。

因为在 C++ 里,一个 \ 代表的是字符串转义,所以我们的正则表达式转义要两个 \ ,所以是\\d。

d8e5a8d7203f42c79a65d9c7b14998e8.png

#include<regex>
#include<iostream>
using namespace std;
int main() {
	string n = "abc3";
	bool res = regex_match(n, regex("abc\\d"));
	cout << res << endl;
	return 0;
}

 这段代码匹配了 abc 后面带任意一个 0-9 的数字的字符串,最后结果为 1 (true),代表符合匹配要求。

\D用法

注意,这里是大写的 D 。

这代表非数字,和上面的 \d 相反。

bd4e15a8db434467bce4fabbe43bf73a.png

#include<regex>
#include<iostream>
using namespace std;
int main() {
	string n = "abc3";
	bool res = regex_match(n, regex("abc\\D"));
	cout << res << endl;
	return 0;
}

最后运行结果为 0,因为 3 不是非数字。

\w用法

它代表任意一个大写或小写字母、数字或下划线。

d6e7424a005d4930bf381b17ec17c80b.png

这段代码结果是1,因为3是数字。

5462720a7bcb4405b38f289eb27d1aca.png 

这段代码的运行结果也是1。

\W的用法

大写W代表小写w相反,表示除大写或小写字母、数字或下划线的字符(包括空格)。

8d79b06755aa452c8a6f45e6ac20a5b6.png

这段代码运行结果为1,因为我在abc后面加了一个空格。

 \s的用法

它代表匹配一个肉眼无法看见的符号,比如空格或 Tab。

618812eb829f4ee08166098bf6c6b0cb.png

因为我在abc后面加了1,所以结果为0。

 \S的用法

与\s相反,不是肉眼无法看见的符号。

a2233aba6ff0417a9a46c442f711919e.png

它的结果也是1。

 .的用法

这是一个小数点,表示除了 \n 和 \r 以外的任何字符。

e5d8e734fe82484f833c5bc6b56796b1.png

四个小数点表示四个任意字符,所以结果为1。

 |的用法

表示或,表示满足任意一个条件即可

494aa79782774dbe85fd3cfb6258febe.png

 结果为1,符合第一个条件。

注意,如果前后都有其他字符,要用小括号 ( ) 把 | 语句包裹起来。

[]的用法

例如[abc]表示只要是abc中的一个就可以。

437886ecf626490297efd30d62e35c5e.png 

结果为1,因为w在we1中。

^的用法

例如[^abc]表示除abc外,其他字符都可以。

ee4a134ff40041f09e8dcb3afce0eaa1.png结果是0,因为加了 ^。

 -的用法

例如 [1-9] 代表从1到9的任意一个字符。

155c06d63b884255a7710cae3e4e2a98.png

结果为1。

^ -的用法

例如^1-9表示匹配除1-9之间的任意一个字符。

18ef3251d23c490fb11c19dc109e363d.png

结果为1。因为6不再1-5的范围内。

{}的用法

例如{n}表示匹配前面的表达式n次。

a6928a7f856645fa8bab2bdb827d4aa6.png 

结果为1。

{,}的用法

例如{a,b}表示匹配前面的表达式最少a次,最多b次。

4a4a57c6cb984f3bae9353371ce88c09.png 

结果为1,匹配1次。

*的用法

匹配前面的表达式任意次。

regex_sreach用法

它和上面的 regex_match 有两个不同点:

1. 把函数名改成 regex_sreach

2. 匹配方式不同, sreach 是只要目标字符串里有子串符合要求就可以。

比如我们有 dabcf这样一个字符串,如果我们用 regex_match匹配abc,结果为0,当用sreach结果为1。

regex_replace用法

它可以替换匹配成功部分为指定数据。

比如我要把一个字符串里的 abc 换成123,可以用这个。

它和 regex_sreach也有两个不同点:

1. 函数名不同

2. 函数后面还有第三个参数,就是你的指定数据,比如上面的123,为 string 类型。

最后

我自己觉得真的很详细了(超级自恋),如果有不正确请在评论区指正,有问题也可以在评论区问。

 

 

 

 

 

 

 

 

相关文章:

  • 【流行框架】Spring
  • Code For Better 谷歌开发者之声——开发者必备神器
  • 猿创征文|机器学习实战(8)——随机森林
  • 红黑树的删除
  • 猿创征文|学习记录之 PHP 中的面向对象编程
  • 猿创征文|UDP/TCP网络编程
  • 1-丁基-3-甲基咪唑双三氟甲基磺酰亚胺([BMIm] NTf2)离子液体修饰Ni镍纳米颗粒的介绍
  • 定时任务报警通知解决方案详解
  • 【js】js实现分页02
  • “结构体名”和“结构体名是个指针”的区别
  • 网课查题api接口使用方法
  • 干货分享|优炫数据库支撑GIS融合的探索
  • 重写DATAGRID控件,当对行编辑后重LOAD后可定位到最后点击的那一行。
  • 基于强化学习的空域作战辅助决策(1D)
  • 【AGC】使用云调试优惠扣费、华为设备上触发崩溃、无法下载华为应用市场问题小结
  • .pyc 想到的一些问题
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 4个实用的微服务测试策略
  • Electron入门介绍
  • ES6语法详解(一)
  • golang中接口赋值与方法集
  • hadoop集群管理系统搭建规划说明
  • java多线程
  • js写一个简单的选项卡
  • Linux下的乱码问题
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • underscore源码剖析之整体架构
  • 从0实现一个tiny react(三)生命周期
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 浅谈web中前端模板引擎的使用
  • 悄悄地说一个bug
  • 系统认识JavaScript正则表达式
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 移动端唤起键盘时取消position:fixed定位
  • 由插件封装引出的一丢丢思考
  • 正则与JS中的正则
  • ​比特币大跌的 2 个原因
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (3)llvm ir转换过程
  • (二)JAVA使用POI操作excel
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (一)基于IDEA的JAVA基础12
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转) RFS+AutoItLibrary测试web对话框
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET 中 GetProcess 相关方法的性能
  • .net操作Excel出错解决
  • .NET与 java通用的3DES加密解密方法
  • .py文件应该怎样打开?
  • @Autowired和@Resource的区别