原文地址:http://m.cnblogs.com/39034/1593905.html?full=1
RFC1378 http://www.ietf.org/rfc/rfc1738.txt
#region Http
stringlowalpha = @"[a-z]";
stringhialpha = @"[A-Z]";
//stringalpha = String.Format(@"({0}|{1})", lowalpha, hialpha);
stringalpha = String.Format(@"[a-zA-Z]", lowalpha, hialpha);
stringdigit = @"[0-9]";
stringsafe = @"(\$|-|_|\.|\+)";
stringextra = @"(!|\*|'|\(|\)|,)";
//stringhex = String.Format(@"({0}|A|B|C|D|E|F|a|b|c|d|e|f)", digit);
stringhex = @"[0-9A-Fa-f]";
//stringescape = String.Format(@"(%{0}{0})", hex);
stringescape = @"(%[a-zA-Z0-9][a-zA-Z0-9])";
stringunreserved = String.Format(@"({0}|{1}|{2}|{3})", alpha, digit,safe, extra);
stringuchar = String.Format(@"({0}|{1})", unreserved, escape);
stringreserved = @"(;|/|\?|:|@|&|=)";
stringxchar = String.Format(@"({0}|{1}|{2})", unreserved, reserved,escape);
stringdigits = String.Format(@"({0}+)", digit);
//stringalphadigit = String.Format(@"({0}|{1})", alpha, digit);
stringalphadigit = @"[a-zA-Z0-9]";
stringdomainlabel = String.Format(@"({0}|{0}({0}|-)*{0})", alphadigit);
stringtoplabel = String.Format(@"({0}|{0}({1}|-)*{1})", alpha,alphadigit);
stringhostname = String.Format(@"(({0}\.)*{1})", domainlabel,toplabel);
stringhostnumber = String.Format(@"{0}\.{0}\.{0}\.{0}", digits);
stringhost = String.Format(@"({0}|{1})", hostname, hostnumber);
stringport = digits;
stringhostport = String.Format(@"({0}(:{1}){{0,1}})", host, port);
stringhsegment = String.Format(@"(({0}|;|:|@|&|=)*)", uchar);
stringsearch = String.Format(@"(({0}|;|:|@|&|=)*)", uchar);
stringhpath = String.Format(@"{0}(/{0})*", hsegment);
stringhttpurl = String.Format(@"http://{0}(/{1}(\?{2}){{0,1}}){{0,1}}",hostport, hpath, search);
#endregion
#region Ftp
stringuser = String.Format(@"(({0}|;|\?|&|=)*)", uchar);
stringpassword = String.Format(@"(({0}|;|\?|&|=)*)", uchar);
stringlogin = String.Format(@"(({0}(:{1}){{0,1}}@){{0,1}}{2})",user, password, hostport);
stringfsegment = String.Format(@"(({0}|\?|:|@|&|=)*)", uchar);
stringftptype = @"(A|I|D|a|i|d)";
stringfpath = String.Format(@"({0}(/{0})*)", fsegment);
stringftpurl = String.Format(@"ftp://{0}(/{1}(;type={2}){{0,1}}){{0,1}}",login, fpath, ftptype);
#endregion
#region News
stringgroup = String.Format(@"({0}({0}|{1}|-|\.|\+|_)*)", alpha,digit);
stringarticle = String.Format(@"(({0}|;|/|\?|:|&|=)+@{1})", uchar,host);
stringgrouppart = String.Format(@"(\*|{0}|{1})", group, article);
stringnewsurl = String.Format(@"(news:{0})", grouppart);
#endregion
#region Nntpurl
stringnntpurl = String.Format(@"nntp://{0}/{1}(/{2}){{0,1}}",hostport, group, digits);
#endregion
#region Telnet
stringtelneturl = String.Format(@"telnet://{0}/{{0,1}}", login);
#endregion
#region Gopher
stringgtype = xchar;
stringselector = String.Format(@"({0}*)", xchar);
stringgopherplus_string = String.Format(@"({0}*)", xchar);
stringgopherurl = String.Format(@"gopher://{0}(/({1}({2}(%09{3}(%09{4}){{0,1}}){{0,1}}){{0,1}}){{0,1}}){{0,1}}",hostport, gtype, selector, search, gopherplus_string);
#endregion
#region Wais
stringdatabase = String.Format(@"({0}*)", uchar);
stringwtype = String.Format(@"({0}*)", uchar);
stringwpath = String.Format(@"({0}*)", uchar);
stringwaisdatabase = String.Format(@"(wais://{0}/{1})", hostport,database);
stringwaisindex = String.Format(@"(wais://{0}/{1}\?{2})", hostport,database, search);
stringwaisdoc = String.Format(@"(wais://{0}/{1}/{2}/{3})", hostport,database, wtype, wpath);
stringwaisurl = String.Format(@"{0}|{1}|{2}", waisdatabase, waisindex,waisdoc);
#endregion
#region Mailto
stringencoded822addr = String.Format(@"({0}+)", xchar);
stringmailtourl = String.Format(@"mailto:{0}", encoded822addr);
#endregion
#region File
stringfileurl = String.Format(@"file://({0}{{0,1}}|localhost)/{1}",host, fpath);
#endregion
#regionProsperourl
stringfieldname = String.Format(@"({0}|\?|:|@|&)", uchar);
stringfieldvalue = String.Format(@"({0}|\?|:|@|&)", uchar);
stringfieldspec = String.Format(@"(;{0}={1})", fieldname, fieldvalue);
stringpsegment = String.Format(@"(({0}|\?|:|@|&|=)*)", uchar);
stringppath = String.Format(@"({0}(/{0})*)", psegment);
stringprosperourl = String.Format(@"prospero://{0}/{1}({2})*", hostport,ppath, fieldspec);
#endregion
#region Otherurl
//otherurlequal genericurl
stringurlpath = String.Format(@"(({0})*)", xchar);
stringscheme = String.Format(@"(({0}|{1}|\+|-|\.)+)", lowalpha,digit);
stringip_schemepar = String.Format(@"(//{0}(/{1}){{0,1}})", login,urlpath);
stringschemepart = String.Format(@"(({0})*|{1})", xchar, ip_schemepar);
stringgenericurl = String.Format(@"{0}:{1}", scheme, schemepart);
stringotherurl = genericurl;
#endregion