设为首页 收藏本站
查看: 2121|回复: 0

[经验分享] 万能Url正则表达式[http,ftp,news,telnet.....]——史上最全Url正则表达式(基于RFC1738‏

[复制链接]

尚未签到

发表于 2016-6-11 07:19:47 | 显示全部楼层 |阅读模式
  文章来源:http://www.pin5i.com/showtopic-25932.html
  
  由于工作需要写了一个包括所有Url的正则表达式,用来验证返回的Url是否符合RFC1738规定。

有兴趣的同学可以去看RFC1378关于Url部分的介绍(http://www.ietf.org/rfc/rfc1738.txt),本文中的代码是按其规定编写的。

在没有了解RFC1738的时候,一直以为Url的正则表达式很简单,没想到Url有这么多分类,更没想到一个普通的http的正则表达式也不是那么简单。

以下是我搜到的关于http的正则表达式:

  • http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

复制代码
  当然这已经满足大部分人的需求了,但是如果需要严格的验证的话还是要符合RFC1738了。

Url包括Http,Ftp,News,Nntpurl,Telnet,Gopher,Wais,Mailto,File,Prosperurl和Otherurl。

呵呵,废话不多说了,上代码

  • #region Http
  •             string lowalpha = @"[a-z]";
  •             string hialpha = @"[A-Z]";
  •             string alpha = String.Format(@"({0}|{1})", lowalpha, hialpha);
  •             string digit = @"[0-9]";
  •             string safe = @"(\$|-|_|\.|\+)";
  •             string extra = @"(!|\*|'|\(|\)|,)";
  •             string hex = String.Format(@"({0}|A|B|C|D|E|F|a|b|c|d|e|f)", digit);
  •             string escape = String.Format(@"(%{0}{0})", hex);
  •             string unreserved = String.Format(@"({0}|{1}|{2}|{3})", alpha, digit, safe, extra);
  •             string uchar = String.Format(@"({0}|{1})", unreserved, escape);
  •             string reserved = @"(;|/|\?|:|@|&|=)";
  •             string xchar = String.Format(@"({0}|{1}|{2})", unreserved, reserved, escape);
  •             string digits = String.Format(@"({0}+)", digit);
  •             string alphadigit = String.Format(@"({0}|{1})", alpha, digit);
  •             string domainlabel = String.Format(@"({0}|{0}({0}|-)*{0})", alphadigit);
  •             string toplabel = String.Format(@"({0}|{0}({1}|-)*{1})", alpha, alphadigit);
  •             string hostname = String.Format(@"(({0}\.)*{1})", domainlabel, toplabel);
  •             string hostnumber = String.Format(@"{0}\.{0}\.{0}\.{0}", digits);
  •             string host = String.Format(@"({0}|{1})", hostname, hostnumber);
  •             string port = digits;
  •             string hostport = String.Format(@"({0}(:{1}){{0,1}})", host, port);
  •             string hsegment = String.Format(@"(({0}|;|:|@|&|=)*)", uchar);
  •             string search = String.Format(@"(({0}|;|:|@|&|=)*)", uchar);
  •             string hpath = String.Format(@"{0}(/{0})*", hsegment);
  •             string httpurl = String.Format(@"http://{0}(/{1}(\?{2}){{0,1}}){{0,1}}", hostport, hpath, search);
  •             #endregion

复制代码

  • #region Ftp
  •             string user = String.Format(@"(({0}|;|\?|&|=)*)", uchar);
  •             string password = String.Format(@"(({0}|;|\?|&|=)*)", uchar);
  •             string login = String.Format(@"(({0}(:{1}){{0,1}}@){{0,1}}{2})", user, password, hostport);
  •             string fsegment = String.Format(@"(({0}|\?|:|@|&|=)*)", uchar);
  •             string ftptype = @"(A|I|D|a|i|d)";
  •             string fpath = String.Format(@"({0}(/{0})*)", fsegment);
  •             string ftpurl = String.Format(@"ftp://{0}(/{1}(;type={2}){{0,1}}){{0,1}}", login, fpath, ftptype);
  •             #endregion

复制代码

  • #region News
  •             string group = String.Format(@"({0}({0}|{1}|-|\.|\+|_)*)", alpha, digit);
  •             string article = String.Format(@"(({0}|;|/|\?|:|&|=)+@{1})", uchar, host);
  •             string grouppart = String.Format(@"(\*|{0}|{1})", group, article);
  •             string newsurl = String.Format(@"(news:{0})", grouppart);
  •             #endregion

复制代码

  • #region Nntpurl
  •             string nntpurl = String.Format(@"nntp://{0}/{1}(/{2}){{0,1}}", hostport, group, digits);
  •             #endregion

复制代码

  • #region Telnet
  •             string telneturl = String.Format(@"telnet://{0}/{{0,1}}", login);
  •             #endregion

复制代码

  • #region Gopher
  •             string gtype = xchar;
  •             string selector = String.Format(@"({0}*)", xchar);
  •             string gopherplus_string = String.Format(@"({0}*)", xchar);
  •             string gopherurl = 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
  •             string database = String.Format(@"({0}*)", uchar);
  •             string wtype = String.Format(@"({0}*)", uchar);
  •             string wpath = String.Format(@"({0}*)", uchar);
  •             string waisdatabase = String.Format(@"(wais://{0}/{1})", hostport, database);
  •             string waisindex = String.Format(@"(wais://{0}/{1}\?{2})", hostport, database, search);
  •             string waisdoc = String.Format(@"(wais://{0}/{1}/{2}/{3})", hostport, database, wtype, wpath);
  •             string waisurl = String.Format(@"{0}|{1}|{2}", waisdatabase, waisindex, waisdoc);
  •             #endregion

复制代码

  • #region Mailto
  •             string encoded822addr = String.Format(@"({0}+)", xchar);
  •             string mailtourl = String.Format(@"mailto:{0}", encoded822addr);
  •             #endregion

复制代码

  • #region File
  •             string fileurl = String.Format(@"file://({0}{{0,1}}|localhost)/{1}", host, fpath);
  •             #endregion

复制代码

  • #region Prosperourl
  •             string fieldname = String.Format(@"({0}|\?|:|@|&)", uchar);
  •             string fieldvalue = String.Format(@"({0}|\?|:|@|&)", uchar);
  •             string fieldspec = String.Format(@"(;{0}={1})", fieldname, fieldvalue);
  •             string psegment = String.Format(@"(({0}|\?|:|@|&|=)*)", uchar);
  •             string ppath = String.Format(@"({0}(/{0})*)", psegment);
  •             string prosperourl = String.Format(@"prospero://{0}/{1}({2})*", hostport, ppath, fieldspec);
  •             #endregion

复制代码

  • #region Otherurl
  •             //otherurl equal genericurl
  •             string urlpath = String.Format(@"(({0})*)", xchar);
  •             string scheme = String.Format(@"(({0}|{1}|\+|-|\.)+)", lowalpha, digit);
  •             string ip_schemepar = String.Format(@"(//{0}(/{1}){{0,1}})", login, urlpath);
  •             string schemepart = String.Format(@"(({0})*|{1})", xchar, ip_schemepar);
  •             string genericurl = String.Format(@"{0}:{1}", scheme, schemepart);
  •             string otherurl = genericurl;
  •             #endregion

复制代码
  有了Pattern剩下的就简单多了,无非就是正则表达式的验证了,以Http为例:

Http的pattern为string httpurl,假设要验证的Url为url,所以验证url的代码如下:

  • Regex regex = new Regex(httpurl);
  • bool isMatchHttp = regex.IsMatch(url);

复制代码
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-228820-1-1.html 上篇帖子: Good FTP for books 下篇帖子: Java网络编程从入门到精通(28):获取ServerSocket信息的方法及FTP原理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表