regex_match抛出运行时异常

时间:2013-06-06 09:40:13

标签: c++ regex exception

#include`<iostream>`
#include `<string>`
#include `<regex>`


using namespace std;



int main ()
{

try{



  std::regex re("(http|https)://(\\w+\\.)*(\\w*)/([\\w\\d]+/{0,1})+");
  if (std::regex_match ("http://www.google.com", re))
    {
    std::cout << "valid URL \n";
    }

  else 
    {
    std::cout << "invalid URL \n";
    }
}

 catch(std::regex_error& e)
{

if (e.code() == std::regex_constants::error_brack)
      std::cerr << "Problem with brackets--"<<e.code()<<"\n";

if (e.code() == std::regex_constants::error_collate)
      std::cerr << "Problem error_collate--"<<e.code()<<"\n";

if (e.code() == std::regex_constants::error_ctype)
      std::cerr << "Problem error_ctype--"<<e.code()<<"\n";

if (e.code() == std::regex_constants::error_escape)
      std::cerr << "Problem error_escape--"<<e.code()<<"\n";

if (e.code() == std::regex_constants::error_backref)
      std::cerr << "Problem error_backref--"<<e.code()<<"\n";


if (e.code() == std::regex_constants::error_paren)
      std::cerr << "Problem error_paren--"<<e.code()<<"\n";

if (e.code() == std::regex_constants::error_brace)
      std::cerr << "Problem error_brace--"<<e.code()<<"\n";

if (e.code() == std::regex_constants::error_badbrace)
      std::cerr << "Problem error_badbrace--"<<e.code()<<"\n";

if (e.code() == std::regex_constants::error_range)
      std::cerr << "Problem error_range--"<<e.code()<<"\n";

if (e.code() == std::regex_constants::error_space)
      std::cerr << "Problem error_space--"<<e.code()<<"\n";




}

 std::cout << std::endl;






 return 0;
}

上述代码有什么问题?

我用g++ -std=gnu++0x testURL.cpp

编译了它

编译得很好,但是当我尝试使用./a.out

执行时

抛出与正则表达式转义序列相关的异常。

我应该更正o / p有效网址

正则表达式中的转义序列存在一些问题吗?

我们如何解决?

2 个答案:

答案 0 :(得分:1)

你能试试这个正则表达式吗?

std::regex re("(http|https)://(\\w+\.)*(\\w*)/([\\w\\d]+/?)+");

答案 1 :(得分:1)

首先,忘记将std::regex与gcc一起使用;虽然一些正则表达式函数编译,但它们不起作用。

使用clang / libc ++运行程序或使用gcc但是将其从std::regex更改为boost::regex时,我得到“Invalid URL”输出,原因是两者都没有你的正则表达式中的正斜杠或它之后的部分(/([\\w\\d]+/{0,1})+)出现在你匹配的字符串中。