我认为这将是一个简单的谷歌搜索,但显然不是。我可以在C#中使用什么样的正则表达式从较大的文本中解析出包含任何查询字符串的URL ?我花了很多时间,发现了很多不包含查询字符串的例子。而且我不能使用System.URI,因为这假设您已经拥有了URL ...我需要在周围的文本中找到它。
答案 0 :(得分:3)
这应该可以得到任何东西(随意添加其他协议):
@"(https?|ftp|file)\://[A-Za-z0-9\.\-]+(/[A-Za-z0-9\?\&\=;\+!'\(\)\*\-\._~%]*)*"
真正的困难在于找到目的。这样,这种模式依赖于找到无效字符。这将是域名结尾之前的字母,数字,连字符或句号以外的任何内容,或者除了正斜杠(/),问号(?),&符号(&),等号(=)之外的任何内容,分号(;),加号(+),感叹号(!),撇号/单引号('),打开/关闭括号,星号(*),下划线(_),波浪号(〜)或百分号( %)域名之后。
请注意,这会允许无效的网址,例如
http://../
它会在URL之后拾取内容,例如在此字符串中:
也许你应该试试http://www.google.com。
"http://www.google.com."
(与尾随期间)匹配。
它也会错过不以协议规范开头的URL(特别是第一组括号中的协议。例如,它会错过此字符串中的URL:
也许你应该试试www.google.com。
如果没有一些更好定义的界限,很难得到每一个案例。
答案 1 :(得分:0)
RegexLib有很多有用的东西......
答案 2 :(得分:0)
答案 3 :(得分:0)
抱歉,我还无法添加评论,但是想指出P Daddy的答案需要稍微调整一下:
@"(https?|ftp|file)\://[a-zA-Z0-9\.\-]+(/[a-zA-Z0-9\?\&\=;\+!'\(\)\*\-\._~%]*)*"
答案 4 :(得分:0)
我想出了以下几点:
带有协议的网址
^(https?|ftp|file)\:\/\/([a-zA-Z0-9]+[a-zA-Z0-9\-_])+(\.([a-zA-Z0-9]+[a-zA-Z0-9\-_])+)+(\/(?!\/)[a-zA-Z0-9\-_\.]*)*(\??)[a-zA-Z0-9_\-\.~=%]*$
没有协议的网址
^([a-zA-Z0-9]+[a-zA-Z0-9\-_])+(\.([a-zA-Z0-9]+[a-zA-Z0-9\-_])+)+(\/(?!\/)[a-zA-Z0-9\-_\.]*)*(\??)[a-zA-Z0-9_\-\.~=%]*$
答案 5 :(得分:-1)
查看这个人的QueryString构建器类 -
微软也有一个可能对你有帮助的UriBuilder -
http://msdn.microsoft.com/en-us/library/system.uribuilder.query.aspx