c# - URL 的正则表达式,包括查询字符串

标签 c# .net regex url

我认为这将是一个简单的谷歌搜索,但显然不是。我可以在 C# 中使用什么正则表达式从较大的文本中解析出 URL 包括任何查询字符串?我花了很多时间,发现了很多不包含查询字符串的示例。而且我不能使用 System.URI,因为这假设您已经有了 URL...我需要在周围的文本中找到它。

最佳答案

这应该得到任何东西(随意添加额外的协议(protocol)):

@"(https?|ftp|file)\://[A-Za-z0-9\.\-]+(/[A-Za-z0-9\?\&\=;\+!'\(\)\*\-\._~%]*)*"

真正的困难是找到终点。照原样,此模式依赖于查找无效字符。这将是域名末尾之前的字母、数字、连字符或句点以外的任何内容,或者除了正斜杠 (/)、问号 (?)、与号 (&)、等号 (=) 之外的任何内容分号 (;)、加号 (+)、感叹号 (!)、撇号/单引号 (')、左/右括号、星号 (*)、下划线 (_)、波浪号 (~) 或百分号 (% ) 在域名之后。

请注意,这将允许无效的 URL,例如

http://../

它会在 URL 之后获取内容,例如在这个字符串中:

Maybe you should try http://www.google.com.

"http://www.google.com."(带有尾随句点)将被匹配。

它还会漏掉不是以协议(protocol)规范开头的 URL(具体来说,是第一组括号内的协议(protocol)。例如,它会漏掉此字符串中的 URL:

Maybe you should try www.google.com.

如果没有一些更好定义的边界,很难得到每个案例。

关于c# - URL 的正则表达式,包括查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2343177/

相关文章:

c# - 向 Entity Framework 对象动态添加属性

c# - 在 C# 中创建时间戳的函数

c# - Lucene.Net - 如何检索单个文档

c# - .NET 类库中的 IAudioEndpointVolume 位于何处?

.net - 数据源名称的大小写敏感性

node.js - 匹配任何字符(包括空格),直到最后一堆空格

python - 用于替换字母数字字符串中间但不在末尾的数字的 RegEx

C# 事件未被处理

.net - HTTPS 和摘要认证

javascript - 尝试将 url 路径名与 RegEx 匹配