包含测试我的正则表达式模式的所有有效字符的URL?

时间:2010-09-21 03:48:33

标签: regex testing url

首先,我创建了自己的正则表达式来查找文本中的所有网址,因为:

  1. 当我搜索SO时,谷歌只发现了特定网址结构的正则表达式,如图片等。
  2. 我从PHP的手册中找到了一个非常完整的正则表达式(参见http://php.net/manual/en/function.preg-match.php上的“freenet dot de 01-Oct-2009 12:01”中的“splattermania”),它几乎可以找到任何类似于URL的内容,如很像“bit.ly”。
  3. 这种模式有一些错误和约束,所以我正在修复和增强它。
  4. 现在模式结构似乎正确,但我不确定是否存在所有有效字符。请发布网址样本以测试我的模式。可能是懒惰,但我不想阅读页面和页面的引用来找到所有这些,需要专注于开发。如果您有可以共享的用户名,密码,路径,查询和锚的有效字符摘要,那将非常有帮助。

    最诚挚的问候!

1 个答案:

答案 0 :(得分:1)

您链接的模式确实匹配了许多有效和无效的网址。这并不奇怪,因为几乎所有正则表达式都是可选的;正如你自己写的那样,它甚至匹配bit.ly,因此很容易看出它如何匹配大量的非URL内容。

对于一个(例如http://www.müller.de),它不会考虑新的Unicode域名。

它与

等有效网址不匹配
http://msdn.microsoft.com/en-us/library/aa752574(VS.85).aspx

它与相对路径(可能不是必需的)不匹配,如/cgi-bin/version.pl

它与mailto:个链接不匹配。

它与http://1.2.3.4之类的网址不匹配。甚至不询问IPv6:)

总而言之,正则表达式 NOT 可靠地匹配或验证URL的正确工具。这是解析器的工作。如果你能忍受许多误报和假阴性比赛,那么正则表达式就可以了。

请阅读Jan Goyvaerts关于此主题的优秀论文:Detecting URLs in a block of text