2
#include  <iostream>      
#include  <string>    
#include <regex>    
using namespace std;   

int main ()
{        

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

}

它与警告一起编译,但是当我执行它时

terminate called after throwing an instance of 'std::regex_error'

  what():  regex_error

中止(核心转储)

我该做什么?

4

2 回答 2

3

您忽略的警告可能会告诉您问题所在。

通过查看模式,您没有正确地转义模式字符串。

正确转义模式字符串以使用 '\' 转义反斜杠将解决问题。否则,编译器会尝试将未转义的反斜杠后面的字符解释为字符串控制字符。

std::regex("(http|https)://(\\w+.)(\\w)/([\\w\\d]+/{0,1})+")
于 2013-05-27T09:18:06.180 回答
1

尝试cpp-netlib

#include <string>
#include <iostream>
#include <boost/network/uri.hpp>

int main (int argc, char ** argv)
{
    std::string address = "http://www.google.com";
    boost::network::uri::uri uri_(address);
    if ( !boost::network::uri::valid(uri_) )
    {
        // error
        std::cout << "not valid" << std::endl;
        return 0;
    }
    std::cout << "valid" << std::endl;

    std::string host = boost::network::uri::host(uri_); 
    std::string port = boost::network::uri::port(uri_); 
    std::string scheme = boost::network::uri::scheme(uri_);

    return 0;
}

如何构建(在我的例子中,cpp-netlib 在 /root/cpp-netlib-0.9.4/ 中):

g++ main.cpp -L/root/cpp-netlib-0.9.4/libs/network/src/ -I/root/cpp-netlib-0.9.4/ -o main -lcppnetlib-uri -lboost_system     
于 2013-05-27T09:28:04.757 回答