在没有了解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);
复制代码
分享到:
相关推荐
$/` - 此正则表达式匹配完整的URL,包括HTTP或HTTPS协议、域名和可选路径。 6. IP 地址:`/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/` - 用于验证IPv4地址的...
正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。它通过预定义的模式来识别和操作字符串中的数据。以下是一些常见的正则表达式及其用途: 1. 匹配中文字符:`[u4e00-u9fa5]` - 这个正则...
根据提供的文件信息,我们可以整理出一系列与正则表达式相关的知识点。这些知识点涵盖了从基本的数字验证到复杂的字符串匹配等多个方面。下面是详细的知识点总结: ### 基本概念 正则表达式是一种用于文本模式匹配...
在VB.NET中,正则表达式(Regular Expression)是一种强大的文本处理工具,它允许程序员通过模式匹配来处理字符串。这个“vb正则表达式实例”很可能是为了帮助开发者测试和理解正则表达式的工作原理而设计的一个应用...
【JS正则表达式大全【6】】这篇文章主要介绍了JavaScript中的正则表达式应用实例,主要探讨了如何利用正则表达式进行字符串处理和数据验证,显著地简化了代码并提高了效率。 首先,文章提到了去除字符串两端空格的...
### 正则表达式-常用正则表达式大全 #### 一、正则表达式的概念与作用 正则表达式(Regular Expression),通常被简称为regex或regexp,是一种用于匹配字符串的强大工具。它广泛应用于文本搜索和替换操作,特别是...
在本主题中,我们重点关注“url正则表达式”,它主要用于验证、提取或操作URL(统一资源定位符)。URL是互联网上资源的唯一地址,遵循特定的格式标准。 博文链接给出的是一个ITEYE上的博客,由pengwenchao分享的...
### 正则表达式知识点详解 #### 一、校验数字的正则表达式 **1.1 数字** - **表达式:** `^[0-9]*$` - **解释:** 匹配任意数量(包括0个)的数字。 - **应用场景:** 用于验证输入是否全为数字。 **1.2 n位的数字**...
正则表达式自动生成器V2.0.0.1是一款强大的工具,旨在帮助用户方便快捷地构建和测试正则表达式。它提供了多语言支持,使得不同地区的用户都能无障碍地使用。在IT领域,正则表达式是进行文本处理、数据验证和搜索替换...
定义了一个正则表达式,用于匹配以“abc.com”结尾且域名由1到3个小写字母组成的URL。然后,创建了一个`Term`对象,并将其传递给`RegexQuery`构造函数。 4. **执行查询**: ```java Hits hits = searcher.search...
例如,"子程序_正则文本替换"可能就是一个易语言中用于执行正则表达式替换的子程序,它接收输入的文本、正则表达式模式和替换字符串,然后返回经过替换操作的新文本。 1. **正则表达式基础** - **元字符**:如`.`...
无论是处理日志文件、数据验证、文本转换还是网络爬虫中的URL提取等,正则表达式都能提供高效、精确的解决方案。而正则表达式之所以为大多数人所知甚少,主要是因为缺乏质量高、易于理解的学习资源。不少教程或书籍...
根据提供的文件信息,我们可以归纳出一系列与正则表达式相关的知识点。这些知识点涵盖了不同类型的正则表达式的构建方法及其用途,对于理解和应用正则表达式非常有帮助。 ### 正则表达式概述 正则表达式(Regular ...
该文档是针对mysql和oracle数据库url地址的校验问题。
### 正则表达式大全与应用案例 #### 一、正则表达式的概念与作用 正则表达式(Regular Expression)是一种模式匹配工具,在文本处理领域有着广泛的应用,尤其是在JavaScript等编程语言中,用于字符串搜索、替换...
正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。在Python编程语言中,正则表达式提供了强大的文本处理能力,使得开发者能够高效地处理...
### 常用的正则表达式大全 在Web开发中,正则表达式是一种非常强大的文本处理工具,被广泛应用于各种应用场景中,比如表单验证、数据清洗、字符串匹配等。下面将详细介绍一系列常见的正则表达式及其应用场景。 ###...
本资源“源码(精通正则表达式&实战正则表达式)”专注于JavaScript环境下的正则表达式学习,通过一系列视频教程和配套源码,帮助开发者提升对正则表达式的理解和应用能力。 首先,"精通正则表达式五部视频"可能涵盖...