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)的更多相关文章

  1. 解决程序出现“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 ...

  2. 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 ...

  3. terminate called after throwing an instance of 'std::bad_alloc'

    这个错误,网上搜索到的资料大多是指向内存不足或者内存碎片问题,如下链接 http://bbs.csdn.net/topics/330000462 http://stackoverflow.com/qu ...

  4. OC 实例变量(Instance Var)和成员变量(member var)区别

    摘要:  Objective-C  引入了“实例变量"的概念,但同时, 也经常出现 “成员变量”的声音. 到底什么是实例变量,什么是成员变量,二者的区别是什么呢? 今天查看apple 的官方 ...

  5. STL——空间的配置和释放std::alloc(第一级配置器和第二级配置器)

    1 空间的配置和释放,std::alloc 对象构造前的空间配置和对象析构后的空间释放,由<stl_alloc.h>负责,SGI对此的设计哲学如下: 向system heap要求空间 考虑 ...

  6. C++11并发——多线程std::mutex (二)

    https://www.cnblogs.com/haippy/p/3237213.html Mutex 又称互斥量,C++ 11中与 Mutex 相关的类(包括锁类型)和函数都声明在 <mute ...

  7. 第12课 std::bind和std::function(3)_std::function可调用对象包装器

    1. std::function (1)首先是一个类模板,用于包装可调用对象.可以容纳除了类成员(函数)指针之外的所有可调用对象. (2)可以将普通函数,lambda表达式和函数对象类统一起来.尽管它 ...

  8. 第11课 std::bind和std::function(2)_std::bind绑定器

    1. 温故知新:std::bind1st和std::bind2nd (1)bind1st.bind2nd首先它们都是函数模板,用于将参数绑定到可调用对象(如函数.仿函数等)的第1个或第2个参数上. ( ...

  9. 第10课 std::bind和std::function(1)_可调用对象

    1. 几种可调用对象(Callable Objects) (1)普通函数指针或类成员的函数指针 (2)具有operator()成员函数的类对象(仿函数).如c++11中的std::function类模 ...

  10. Android如何打印std::cout/printf(重定向stdout)

    Android应用调试时没有stdout和stderr的输出,网上看到的解释都是下面这个样子: ################################################# An ...

随机推荐

  1. python-命令行参数处理 getopt模块详解

    背景 在写脚本程序的时候需要添加一些额外的参数来实现脚本的附加功能或者增强功能,通常的做法是通过sys.argv[i]直接来获取参数的值,但是这个比较局限,要求参数的输入一定要按照顺序. fileNa ...

  2. Net5 WorkService 继承 Quarzt 以及 Net5处理文件上传

    Net5 版本以Core为底层非framework框架的windowservice 服务. 在VS里叫WorkService 可以以CMD方式运行也可以以Windowservice方式运行,部署简单. ...

  3. 如何在.NET Core中为gRPC服务设计消息

    如何在.NET Core中为gRPC服务设计消息 使用协议缓冲区规范定义gRPC服务非常容易,但从需求转换为.NET Core,然后管理服务的演变时,需要注意几件事. 创建gRPC服务的核心是.pro ...

  4. CF1425F Flamingoes of Mystery 题解

    题目传送门 前置知识 前缀和 & 差分 解法 令 \(sum_k=\sum\limits_{i=1}^{k} a_k\).考虑分别输入 \(sum_2 \sim sum_n\),故可以由于差分 ...

  5. JS Leetcode 220. 存在重复元素 III 题解分析,暴力解法与桶排序

    壹 ❀ 引 今天的题目来自LeetCode 220. 存在重复元素 III,难度中等,题目描述如下: 给你一个整数数组 nums 和两个整数 k 和 t .请你判断是否存在 两个不同下标 i 和 j, ...

  6. Python Print 显示颜色

    1.顺序:显示方式,前景颜色,背景颜色 2.顺序非固定,但尽量按默认书写方式 3.也可以在input中输出使用 4.格式: print('\033[显示方式:前景颜色:背景颜色m .......... ...

  7. Springboot中如何使用日志框架logback和log4j2?

    说明 在这个简短的教程中,我们将探索 Spring Boot 中可用的主要日志记录选项:logback和log4j2 初始设置 使用 starters 时,默认使用 Logback 进行日志记录. 让 ...

  8. 如何在Windows上使用Git创建一个可执行脚本?

    长话短说,今天介绍如何在windows上使用Git上创建一个可执行的shell脚本. 首先我们要知道windows上Git新添加的文件权限是:-rw-r--r--(对应权限值是644),而通常创建的s ...

  9. win32 - ReadDirectoryChangesW的使用

    任务:创建一个进程,并在进程内创建一个文本,再创建另一个进程来监控第一个进程内的文本变化 //Process 1 #include <windows.h> #include <ios ...

  10. 【Android逆向】制作Fart脱壳机,完成对NCSearch的脱壳操作

    1. 我的手机是Pixel 1 ,下载fart对应的镜像 镜像位置具体参考大佬博客 https://www.anquanke.com/post/id/201896 2 执行 adb reboot bo ...