我认为这将是一个简单的谷歌搜索,但显然不是。我可以在 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/