tags:

views:

104

answers:

1

Hello, how can i parse an url in c++ with boost regex like i have an url

http://www.google.co.in/search?h=test&q=examaple

i need to split the base url www.google.com and then query path search?h=test&q=examaple

+1  A: 

Are you sure you need regex for that?

#include <iostream>
#include <algorithm>

int main()
{
  using namespace std;
  string x = "http://www.google.co.in/search/search/?h=test&amp;q=examaple";

  size_t sp = x.find_first_of( '/', 7 /* skip http:// part */ );
  if ( sp != string::npos ) {
        string base_url( x.begin()+7, x.begin()+sp );
        cout << base_url << endl;
        sp = x.find_last_of( '/' );
        if ( sp != string::npos ) {
                string query( x.begin()+sp+1, x.end() );
                cout << query << endl;
        }
  }

  return 0;
}

regex version:

string input_string = "http://www.google.co.in/search/search/?h=test&amp;q=examaple";
boost::regex exrp( "^(?:http://)?([^/]+)(?:/?.*/?)/(.*)$" );
boost::match_results<string::const_iterator> what;
if( regex_search( input_string, what, exrp ) ) {
    std::string base_url( what[1].first, what[1].second );
    std::string query( what[2].first, what[2].second );
}
Kirill V. Lyadvinsky
rajesh
@rajesh, fixed and added regex version.
Kirill V. Lyadvinsky
ya it works ...
rajesh
Why do you escape the slashes in that regexp? You don't need to, it works without them
craesh
@craesh, you are right.
Kirill V. Lyadvinsky