1
#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 有効な URL に修正すべきこと

正規表現のエスケープ シーケンスに問題がありますか?

どうすれば解決できますか?

4

2 に答える 2

1

まず第一に、std::regexgcc での使用を忘れてください。一部の正規表現関数はコンパイルされますが、機能しません。

clang/libc++ でプログラムを実行するか、gcc を使用してからstd::regexに変更するとboost::regex、" " 出力が得られます。Invalid URLその理由は、正規表現のスラッシュもその後の部分 ( /([\\w\\d]+/{0,1})+) も文字列に表示されないためです再マッチング。

于 2013-06-08T06:00:50.243 に答える
1

この正規表現を試すことができますか:

std::regex re("(http|https)://(\\w+\.)*(\\w*)/([\\w\\d]+/?)+");
于 2013-06-08T05:19:53.223 に答える