#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
中止(核心倾销)
我应该做什么?
答案 0 :(得分:3)
您忽略的警告可能会告诉您问题所在。
通过查看模式,您没有正确地转义模式字符串。
正确转义模式字符串以使用'\'来转义反斜杠可以解决问题。否则,编译器会将未转义反斜杠后面的字符解释为字符串控制字符。
std::regex("(http|https)://(\\w+.)(\\w)/([\\w\\d]+/{0,1})+")
答案 1 :(得分: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