没有合适的资源?快使用搜索试试~ 我知道了~
c++11中regex正则表达式示例简述
7 下载量 154 浏览量
2020-12-26
09:10:42
上传
评论
收藏 56KB PDF 举报
温馨提示
试读
2页
regex库中涉及到的主要类型有: 以std::string为代表的处理字符串的类型(我们知道还有存储wchar_t的wstring类、原生c式字符串const char*等等,为了简化处理仅介绍std::string类型相关的操作,当你把握住了regex的主脉络之后,想使用其他的版本只要类比就可以) std::regex类,该类型需要一个代表正则表达式的字符串和一个文法选项作为输入,当文法选项不提供时默认为ECMAScript。 std::match_results类,该类用来记录匹配的结果,这是一个模板类,该类的模板参数是一个迭代器类型,对于std::string来说我们定义了
资源详情
资源评论
资源推荐
c++11中中regex正则表达式示例简述正则表达式示例简述
regex库中涉及到的主要类型有:
以std::string为代表的处理字符串的类型(我们知道还有存储wchar_t的wstring类、原生c式字符串const char*等等,为了简化
处理仅介绍std::string类型相关的操作,当你把握住了regex的主脉络之后,想使用其他的版本只要类比就可以)
std::regex类,该类型需要一个代表正则表达式的字符串和一个文法选项作为输入,当文法选项不提供时默认为ECMAScript。
std::match_results类,该类用来记录匹配的结果,这是一个模板类,该类的模板参数是一个迭代器类型,对于std::string来说
我们定义了smatch作为match_results<string::const_iterator>作为别名。
std::sub_match类,该类其实封装了两个迭代器,第一个代表开始部分,第二个代表结束部分,就像你用两个下表索引去表达
一个字符串的某一个子串一样。这个类就是通过这样的方式提供原字符串的某一个子串作为结果。实际上match_results中就
封装了一些std::sub_match类型的对象。(为什么是一些而不是一个,因为一次匹配可能会产生多个结果返回,regex认为每
个括号对构成一个子匹配项,regex匹配的结果可以显式每个子匹配项匹配到的内容。)
现在我们有了表达字符串的类,表达正则匹配的类,表达匹配结果的类,接下来regex提供三个匹配函数:
bool std::regex_match(...)
bool std::regex_search(...)
string std::regex_replace(...)//实际上返回类型是根据你输入的数据类型对应的basic_string类。
首先说明三个函数功能上的不同,std::regex_match是全文匹配,即它希望你输入的字符串要和正则表达式全部匹配,才认为
匹配成功,否则匹配失败,而std::regex_search是在你输入的字符串中不断搜索符合正则表达式描述的子字符串,然后将第一
个匹配到的子字符串返回。std::regex_replace是在std::regex_search的基础上更进一步,可以将匹配的子字符串替换为你提
供的字符串。
看几个例子:
#include <iostream>
#include <string>
#include <regex>
int main() {
std::regex pattern("\d{4}");
std::string content("hello_2018");
std::smatch result;
if (std::regex_match(content, result, pattern)) {
std::cout << result[0];
}
system("pause");
return 0;
}
匹配失败,什么都不会输出。
这里说明一下为什么输出的是result[0],其实result[0]返回的就是一个sub_match类型的对象。regex中认为正则表达式的每个
括号对构成一个子匹配项,并认为整个字符串作为0号子匹配项,然后根据左括号出现的位置,从1号开始编号,因此返回的
result[0]就是匹配整个正则表达式的字符串。
#include <iostream>
#include <string>
#include <regex>
int main() {
std::regex pattern("\d{4}");
std::string content("hello_2018 by_2017");
std::smatch result;
if (std::regex_search(content, result, pattern)) {
std::cout << result[0];
}
system("pause");
return 0;
}
搜索到第一个符合正则表达式的子串,输出 2018。
#include <iostream>
#include <string>
#include <regex>
weixin_38659311
- 粉丝: 5
- 资源: 892
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- database-project-massunaAi笔记
- 2%EF%BC%9A%E9%99%95%E8%A5%BF%E
- yyspdz62_944.apk
- SAP公司间采购EDI配置-如何触发自动MIRO.docx
- python197基于图像识别的仪表实时监控系统.rar
- python196基于循环神经网络的情感分类系统.rar
- I2C驱动SHT30温湿度传感器和LCD12864使用例程(RSCG12864B)
- python193中学地理-中国的江河湖泊教学网(django).rar
- python191基于时间序列分析的大气污染预测软件(django).rar
- python190基于人脸识别智能化小区门禁管理系统.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0