【问题标题】:URL regex - not getting it to workURL 正则表达式 - 无法正常工作
【发布时间】:2012-05-25 02:38:10
【问题描述】:

我正在使用以下正则表达式来查找文本中是否存在 url,但它似乎错过了一些 URL,例如:

  • youtube.be/8P0BxJO
  • youtube.com/watch?v=VrmlFL

还有一些 bit.ly 链接(但不是全部)

Match m = Regex.Match(nc[i].InnerText, 
   @"(http(s)?://)?([\w-]+\.)+[\w-]+(/\S\w[\w- ;,./?%&=]\S*)?");

if (m.Success)
{
    MessageBox.Show(nc[i].InnerText);
}

有什么解决办法吗?

【问题讨论】:

  • 您的正则表达式为您的示例返回 true;您的问题出在其他地方。
  • 也许您可以向我们提供有关您的代码和您尝试解析的文本的更多详细信息。
  • 正如其他 cmets 所建议的那样,两个 URL 都适用于当前表达式,正如在 gskinner.com/RegExr 使用这个方便的小工具测试过的那样
  • 您的正则表达式对我有用,但我认为您在“?”之前缺少反斜杠
  • [\w- ;,./?%&=] 应该是 [\w- ;,./\?%&=]

标签: c# .net regex


【解决方案1】:

请参阅this 相关问题,第一个答案应该可以帮助您。该建议既找到链接,然后替换它们,所以显然只取你需要的东西。 Thisthis 文章是不同的方法,应该会获得或多或少相同的结果。

另一种(可能更可靠)非正则表达式方法是通过分割空格和标点符号来标记字符串,然后使用Uri.IsWellFormedUriString 检查标记以查看它们是否是有效的 uri(仅适用于格式正确的uri 的,正如this 问题所指出的那样)。

【讨论】: