@@ -86,10 +86,15 @@ namespace boost { namespace network { namespace uri {
8686 parts.fragment
8787 );
8888
89- qi::rule<iterator,string_type::value_type ()> reserved =qi::char_ (" ;/?:@&=+$," );
90- qi::rule<iterator,string_type::value_type ()> unreserved = qi::alnum |qi::char_ (" -_.!~*'()" );
91- qi::rule<iterator,string_type ()> escaped =qi::char_ (" %" ) >qi::repeat (2 )[qi::xdigit];
89+ qi::rule<iterator,string_type::value_type ()> gen_delims =qi::char_ (" :/?#[]@" );
90+ qi::rule<iterator,string_type::value_type ()> sub_delims =qi::char_ (" !$&'()*+,;=" );
9291
92+ qi::rule<iterator,string_type::value_type ()> reserved = gen_delims | sub_delims;
93+ qi::rule<iterator,string_type::value_type ()> unreserved = qi::alnum |qi::char_ (" -._~" );
94+ qi::rule<iterator,string_type ()> pct_encoded =qi::char_ (" %" ) >qi::repeat (2 )[qi::xdigit];
95+
96+ qi::rule<iterator,string_type ()> pchar = qi::raw[unreserved | pct_encoded | sub_delims |qi::char_ (" :@" )];
97+
9398 hostname<tags::http>::parser<iterator> hostname;
9499bool ok =qi::parse (
95100 start_, end_,
@@ -101,9 +106,9 @@ namespace boost { namespace network { namespace uri {
101106 ]
102107 >> hostname
103108 >> -qi::lexeme[' :' >> qi::ushort_]
104- >>- qi::lexeme[' / ' >> *(( qi::alnum | qi::punct) - ' ? ' ) ]
105- >> -qi::lexeme[' ?' >> qi::raw[*(reserved |unreserved | escaped )]]
106- >> -qi::lexeme[' #' >> qi::raw[*(reserved |unreserved | escaped )]]
109+ >> qi::lexeme[qi::raw[*( qi::char_ ( " / " ) > *pchar)] ]
110+ >> -qi::lexeme[' ?' >> qi::raw[*(pchar |qi::char_ ( " /? " ) )]]
111+ >> -qi::lexeme[' #' >> qi::raw[*(pchar |qi::char_ ( " /? " ) )]]
107112 ),
108113 result
109114 );