正则表达式替换文本中的URL?

时间:2014-09-02 01:44:54

标签: regex url

目前使用此:

MatchCollection urlRegExp = Regex.Matches(text, @"https?://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+");

替换文本中的网址,但它并没有得到每个网址,而且似乎我找不到一个好的正则表达式...任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

如果你需要在文本中找到网址,你不需要符合RFC(无论数字)它是完全没用的(并且它几乎不可能使用符合标准的模式,它将太慢,太复杂)。

文本中的所有网址都应被视为有效(和/或在生成此文本的人员插入文本之前必须经过验证。换句话说,这不是您的工作!)< / em>的

所以,你必须找到另一种方法。为此,您必须提出正确的问题:如何区分URL和文本?

让我们列出一般标准

  • URL可以从协议开始:http,https,ftp,sftp,ftps,gopher,...
  • 网址可能以www.
  • 开头
  • 网址不包含空格字符
  • 网址始终以字边界开始
  • URL可以在空格字符之前结束,字符串的结尾,除了问号之外的标点符号(即使没有GET参数也可以存在)

根据这些要求,您可以轻松构建http协议的简单模式:

\b(https?://|www\.)\S+(?=\s|[^\P{P}?]|\z)

请注意,一旦获得结果,您可以使用内置函数检查网址的有效性(但通常不会处理所有情况,但现在您知道原因:)< / em>的