terminate called after throwing an instance of 'std::regex_error'(C++11)


PS:要转载请注明出处,本人版权所有。

PS: 这个只是基于《我自己》的理解,
如果和你的原则及想法相冲突,请谅解,勿喷。

环境说明

  无

前言


  无





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];

  得到了下面如图的问题:

rep_img

  于是我去网上找答案,问题出在我构造正则表达式的时候。也就是这句中,std::string pattern(“.*/([^/]+\.[a-zA-Z]+)”);于是我重新修改了表达式N次还是不行,没有办法了,只有去网络海洋去在瞧一瞧看一看。

  最终,我看到了一个消息,给了我一点提示,文中说,可能和GCC版本有关,如果要正常使用C++11的正则表达式,需要注意GCC版本必须为4.9+,WC,TMD,赶紧去看看GCC版本。

rep_img

  然后赶紧使用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;
}
rep_img
rep_img

  最后在说一下不用正则怎么实现的吧!(其实,下面的还要简单点,感觉自己 大写的 ZZ 了,不过涨姿势了。)

file_path="http://1.1.1.1:9001/group1/M00/00/37/wKgfdVoNSTKAKXAzAAD25Sg6ZTE5747.gz";
file_path.substr(file_path.rfind("/")+1);




后记


  无

参考文献




打赏、订阅、收藏、丢香蕉、硬币,请关注公众号(攻城狮的搬砖之路)
qrc_img

PS: 请尊重原创,不喜勿喷。

PS: 要转载请注明出处,本人版权所有。

PS: 有问题请留言,看到后我会第一时间回复。


文章作者: Sky
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Sky !
  目录