terminate called after throwing an instance of 'std::regex_error'(C++11)
PS:要转载请注明出处,本人版权所有。
PS: 这个只是基于《我自己》的理解,
如果和你的原则及想法相冲突,请谅解,勿喷。
前置说明
本文作为本人csdn blog的主站的备份。(BlogID=050)
本文发布于 2017-12-29 14:31:11,现用MarkDown+图床做备份更新。blog原图已丢失,使用csdn所存的图进行更新。(BlogID=050)
环境说明
无
前言
无
std::regex_error
最近修改一个程序,增加了一些功能,为了方便移植,要用到C++11的正则表达式(正则用起来顺手)。这里我就想说明的是:TMD,GCC 语法实现了,库没有写完。。。QAQ,WC。什么不说了。
目标:得到url(类似http://1.1.1.1:9001/group1/M00/00/37/wKgfdVoNSTKAKXAzAAD25Sg6ZTE5747.gz)中的文件名(wKgfdVoNSTKAKXAzAAD25Sg6ZTE5747.gz)。
/*file_path = 类似http://1.1.1.1:9001/group1/M00/00/37/wKgfdVoNSTKAKXAzAAD25Sg6ZTE5747.gz
*/
std::string Target_FileName;
std::string pattern(".*/([^/]+\\.[a-zA-Z]+)");
std::regex re(pattern);
std::match_results<std::string::const_iterator> result;
//std::smatch == std::match_results<std::string::const_iterator>
if ( !std::regex_match(file_path,result,re) ){
yUpgradeLog_Msg("std::regex_match false.");
return -1;
}
yUpgradeLog_Msg(result.size());
Target_FileName = result[1];
得到了下面如图的问题:
于是我去网上找答案,问题出在我构造正则表达式的时候。也就是这句中,std::string pattern(".*/([^/]+\.[a-zA-Z]+)");于是我重新修改了表达式N次还是不行,没有办法了,只有去网络海洋去在瞧一瞧看一看。
最终,我看到了一个消息,给了我一点提示,文中说,可能和GCC版本有关,如果要正常使用C++11的正则表达式,需要注意GCC版本必须为4.9+,WC,TMD,赶紧去看看GCC版本。
然后赶紧使用5.4的gcc再试试如下的代码,过了。我真是无F*uck说。
#include <regex>
#include <iostream>
int main(){
std::string pattern(".*/([^/]+\\.[a-zA-Z]+)");
std::regex re(pattern);
std::match_results<std::string::const_iterator> result;
//std::smatch == std::match_results<std::string::const_iterator>
std::string t = "http://1.1.1.1:9001/group1/M00/00/37/wKgfdVoNSTKAKXAzAAD25Sg6ZTE5747.gz";
if ( !std::regex_match(t,result,re) ){
std::cout<<"std::regex_match false.";
return -1;
}
std::cout<<"result is "<<result[1];
return 0;
}
最后在说一下不用正则怎么实现的吧!(其实,下面的还要简单点,感觉自己 大写的 ZZ 了,不过涨姿势了。)
file_path="http://1.1.1.1:9001/group1/M00/00/37/wKgfdVoNSTKAKXAzAAD25Sg6ZTE5747.gz";
file_path.substr(file_path.rfind("/")+1);
后记
无
参考文献
- 无
打赏、订阅、收藏、丢香蕉、硬币,请关注公众号(攻城狮的搬砖之路)
PS: 请尊重原创,不喜勿喷。
PS: 要转载请注明出处,本人版权所有。
PS: 有问题请留言,看到后我会第一时间回复。
terminate called after throwing an instance of 'std::regex_error'(C++11)的更多相关文章
- 解决程序出现“terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc Aborted (core dumped)”的问题
最近跑程序时出现了这么一个问题: terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_al ...
- terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::substr
运行时报错: terminate called after throwing an instance of 'std::out_of_range'what(): basic_string::subs ...
- terminate called after throwing an instance of 'std::bad_alloc'
这个错误,网上搜索到的资料大多是指向内存不足或者内存碎片问题,如下链接 http://bbs.csdn.net/topics/330000462 http://stackoverflow.com/qu ...
- OC 实例变量(Instance Var)和成员变量(member var)区别
摘要: Objective-C 引入了“实例变量"的概念,但同时, 也经常出现 “成员变量”的声音. 到底什么是实例变量,什么是成员变量,二者的区别是什么呢? 今天查看apple 的官方 ...
- STL——空间的配置和释放std::alloc(第一级配置器和第二级配置器)
1 空间的配置和释放,std::alloc 对象构造前的空间配置和对象析构后的空间释放,由<stl_alloc.h>负责,SGI对此的设计哲学如下: 向system heap要求空间 考虑 ...
- C++11并发——多线程std::mutex (二)
https://www.cnblogs.com/haippy/p/3237213.html Mutex 又称互斥量,C++ 11中与 Mutex 相关的类(包括锁类型)和函数都声明在 <mute ...
- 第12课 std::bind和std::function(3)_std::function可调用对象包装器
1. std::function (1)首先是一个类模板,用于包装可调用对象.可以容纳除了类成员(函数)指针之外的所有可调用对象. (2)可以将普通函数,lambda表达式和函数对象类统一起来.尽管它 ...
- 第11课 std::bind和std::function(2)_std::bind绑定器
1. 温故知新:std::bind1st和std::bind2nd (1)bind1st.bind2nd首先它们都是函数模板,用于将参数绑定到可调用对象(如函数.仿函数等)的第1个或第2个参数上. ( ...
- 第10课 std::bind和std::function(1)_可调用对象
1. 几种可调用对象(Callable Objects) (1)普通函数指针或类成员的函数指针 (2)具有operator()成员函数的类对象(仿函数).如c++11中的std::function类模 ...
- Android如何打印std::cout/printf(重定向stdout)
Android应用调试时没有stdout和stderr的输出,网上看到的解释都是下面这个样子: ################################################# An ...
随机推荐
- 开启未来创新之门:.NET Conf China 2023 精彩回顾及资料下载
2023年12月16日-17日,一年一度的 .NET Conf China 2023 中国 .NET 开发者大会在北京盛大举办!大会以第一天主会场 + AI..NET 8.云原生.IoT.前端& ...
- Power BI 10 DAY
Power BI 上下文 筛选上下文只管筛选,行上下文只管迭代,两者互不干涉,各司其职 计算列操作会自动创建行上下文 度量值不会自动创建行上下文,需要人为使用迭代函数进行行上下文的创建 (迭代函数本身 ...
- 使用 .NET 8.0 和 OpenGL 创建一个简易的渲染器
前言我个人对三维渲染领域的开发有着浓厚的兴趣,尽管并未在相关行业工作过,我的了解还很片面.去年,在与群友聊天时,他们推荐了一本<Unity Shader入门精要>,说适合像我这样想自学的新 ...
- python常用的搜索字符内容函数详解:re.findall/findfiter
区别findall返回listfinditer返回一个MatchObject类型的iterator详细举例介绍1.findall在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹 ...
- NVME(学习笔记一)—概述
NVMe概述 NVMe是一个针对基于PCIe的固态硬盘的高性能的.可扩展的主机控制器接口. NVMe的显著特征是提供多个队列来处理I/O命令.单个NVMe设备支持多达64K个I/O 队列,每个I/O队 ...
- FireFox 报错Security Connection Failed解决方案
1.在浏览器中输入:about:config; 2.搜索security.ssl.enable_ocsp_stapling,双击将其修改为FALSE: 3.返回重新访问之前的网站,问题解决
- Vue+ElementUI实现用户管理前后分离实战二:API接口篇
项目介绍 上一篇介绍了前端相关实现代码和效果,本篇则介绍后端接口API如何实现. :) 上一篇地址: https://blog.csdn.net/IndexMan/article/details/11 ...
- ORA-16019 和 ORA-16018 错误的处理方法
一. ORA-16019 和 ORA-16018 错误产生描述 同事在修改归档目录,一不小心把参数设置错误了, 他设置的是log_archive_dest参数. 这个参数和默认log_archive_ ...
- qt基础知识总结
qt基础知识总结 1.ctrl+r:快速运行 2.两种模式的区别: 一个是提供菜单栏的,一个不提供菜单栏 3.界面讲解 layouts:布局=水平布局+垂直布局+网格布局+表单布局 spacers:垫 ...
- 深入理解Go语言(08):sync.WaitGroup源码分析
一.sync.WaitGroup简介 1.1 sync.WaitGroup 解决了什么问题 在编程的时候,有时遇到一个大的任务,为了提高计算速度,会用到并发程序,把一个大的任务拆分成几个小的独立的任务 ...