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

Joe*_*Fan 6 .net c# regex url

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

P D*_*ddy 4

这应该得到任何东西(随意添加其他协议):

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

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

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

http://../
Run Code Online (Sandbox Code Playgroud)

它会拾取 URL 之后的内容,例如以下字符串:

也许您应该尝试http://www.google.com

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

它还会错过不以协议规范开头的 URL(特别是第一组括号内的协议)。例如,它会错过以下字符串中的 URL:

也许您应该尝试 www.google.com。

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