c++11 之 正则表达式的学习(regex)

本文介绍了C++11中引入的正则表达式库,包括如何引入头文件,创建正则表达式对象,以及三种主要用途:1) 判断字符串是否符合正则规则;2) 批量提取符合规则的子串;3) 进行字符串替换。示例代码展示了具体用法,如`regex_match`、`regex_search`和`regex_replace`等函数的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前用正则表达式都是用的其他框架的类,比如QT的,并没有用过标准库里面的正则表达式,今日偶然得知c++11里面已经添加了对正则表达式的支持,这绝对是一件大好事,如此强大的正则终于可以不依赖于其他的东西就可以用了,故来学习一下如何使用.

首先是要引入正则对应的头文件 #include <regex>

然后就可以声明正则表达式对应的类了

比如 std::regex re ("\\d+?");

这里是说 匹配至少一个数字

用正则的话,我一般是使用三个用途

1.判断某字符串是否符合要求,标准库的用法如下:

std::regex re ("\\d+?");
std::string str = "12q3";
bool ismatch = regex_match(str, re);

这里的ismatch  结果为false;但若是str = "123";,则返回结果为true

也就是 判断是否符合要求,只需要使用 regex_match 这个函数,传字符串和对应的正则规则,然后返回值的结果就是布尔类型,使用非常方便.

2.批量提取符合条件的字符串

比如我的字符串如下,std::string = "d45df544sf";我需要将其中的数字全部提取出来,则代码如下:

std::regex re("\\d+");
std::string str = "d45df544sf";
std::smatch sm;
while (regex_search(str, sm, re)) {
for (int i = 0; i < sm.size(); ++i)
std::cout << sm[i] << " ";
std::cout << std:: endl;
str = sm.suffix().str();
}

这里使用while循环来重复匹配 达到查找全部符合规则的字符串.

此外 还可以使用迭代器的写法来进行提取 代码如下:

std::regex re("\\d+");
std::string str = "d45df544sf";
for (std::sregex_iterator i = std::sregex_iterator(str.begin(), str.end(), re); i != std::sregex_iterator(); ++i)
{
std::cout << i->str() << '\n';
}

也能达到相同的结果 都是输出 45    544

3.进行字符串替换

替换使用的函数是regex_replace 用法如下

std::regex re ("\\d+");
std::string str = "12a3";
std::string str2 = regex_replace(str,re,std::string("w"));

这里实现的效果就是将连续的数字全部替换成w  str2的结果为waw

替换的使用方式与判断是否符合规则类似 只是在最后多传一个要替换为的字符串 然后返回替换后的字符串.

总体来说,标准库的正则表达式的使用我认为是非常方便的,能满足日常的基本需求.

关于正则表达式的入门资料,推荐http://deerchao.net/tutorials/regex/regex.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值