由于工作需要写了一个包括所有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);
复制代码
分享到:
相关推荐
博文链接给出的是一个ITEYE上的博客,由pengwenchao分享的关于URL正则表达式的内容。虽然没有直接提供具体的文章内容,但我们可以根据常见的URL结构和正则表达式基础来探讨这个主题。 1. **URL的基本结构** URL...
在VB.NET中,正则表达式(Regular Expression)是一种强大的文本处理工具,它允许程序员通过模式匹配来处理字符串。这个“vb正则表达式实例”很可能是为了帮助开发者测试和理解正则表达式的工作原理而设计的一个应用...
正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。它通过预定义的模式来识别和操作字符串中的数据。以下是一些常见的正则表达式及其用途: 1. 匹配中文字符:`[u4e00-u9fa5]` - 这个正则...
定义了一个正则表达式,用于匹配以“abc.com”结尾且域名由1到3个小写字母组成的URL。然后,创建了一个`Term`对象,并将其传递给`RegexQuery`构造函数。 4. **执行查询**: ```java Hits hits = searcher.search...
$/` - 此正则表达式匹配完整的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地址的...
正则表达式自动生成器V2.0.0.1是一款强大的工具,旨在帮助用户方便快捷地构建和测试正则表达式。它提供了多语言支持,使得不同地区的用户都能无障碍地使用。在IT领域,正则表达式是进行文本处理、数据验证和搜索替换...
例如,"子程序_正则文本替换"可能就是一个易语言中用于执行正则表达式替换的子程序,它接收输入的文本、正则表达式模式和替换字符串,然后返回经过替换操作的新文本。 1. **正则表达式基础** - **元字符**:如`.`...
根据提供的文件信息,我们可以整理出一系列与正则表达式相关的知识点。这些知识点涵盖了从基本的数字验证到复杂的字符串匹配等多个方面。下面是详细的知识点总结: ### 基本概念 正则表达式是一种用于文本模式匹配...
无论是处理日志文件、数据验证、文本转换还是网络爬虫中的URL提取等,正则表达式都能提供高效、精确的解决方案。而正则表达式之所以为大多数人所知甚少,主要是因为缺乏质量高、易于理解的学习资源。不少教程或书籍...
该文档是针对mysql和oracle数据库url地址的校验问题。
正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。在Python编程语言中,正则表达式提供了强大的文本处理能力,使得开发者能够高效地处理...
本资源“源码(精通正则表达式&实战正则表达式)”专注于JavaScript环境下的正则表达式学习,通过一系列视频教程和配套源码,帮助开发者提升对正则表达式的理解和应用能力。 首先,"精通正则表达式五部视频"可能涵盖...
在实际应用中,正则表达式可以用于验证电子邮件地址、URL、电话号码格式,从长文本中提取特定信息,或者清洗和标准化数据。其灵活性和强大功能使得它成为许多开发者不可或缺的工具。为了更好地掌握正则表达式,建议...
文件"www.pudn.com.txt"可能包含了更多关于如何使用正则表达式进行URL、日期、时间等格式验证的例子,以及如何使用`split()`、`replaceAll()`等方法进行字符串分割和替换的示例。 总的来说,Java的正则表达式是处理...
在C#编程语言中,正则表达式被广泛应用于数据验证,如检查电子邮件地址的有效性或网址URL的格式。以下是对这些常见正则表达式及其在C#中应用的详细解释: 1. **电子邮件地址的正则表达式**: 验证电子邮件地址通常...
例如,在Web服务器中,可以使用正则表达式库解析请求URL;在搜索引擎中,可以用来检索和过滤关键词;在文本编辑器中,可以实现查找和替换功能。 总的来说,GUN C的正则表达式库为C程序员提供了强大的字符串处理能力...
9. **文件爬虫与网络爬虫中的应用**:在文件爬虫中,正则表达式常用于从文本文件中提取所需信息,如URL、邮箱地址等。在网络爬虫中,它可以用于解析HTML或XML文档,提取链接、文本内容等。 10. **编程语言支持**:...
### 报表工具FineReport正则表达式定义规则 #### 一、正则表达式概述 正则表达式是一种强大的文本处理工具,在多种编程语言中都有应用,它可以帮助我们完成字符串搜索、替换等一系列复杂的文本处理任务。在报表...
在Delphi XE10中,正则表达式是一种强大的文本处理工具,它允许程序员通过模式匹配来查找、替换或提取字符串中的特定模式。本文将深入探讨Delphi XE10中的正则表达式功能,包括基本概念、语法、API接口以及实际应用...
### 正则表达式详解 #### 一、正则表达式的定义与背景 正则表达式(Regular Expression),简称regex或regexp,是一种用于描述文本模式的强大工具。它可以帮助我们在文本中进行精确匹配、查找以及替换操作。正则...