我找到了很多关于如何在PHP和其他语言中匹配特定类型的URL的例子。我需要从我的C#应用程序中匹配任何URL。如何操作?当我谈论URL时,我指的是链接到任何站点或站点和子目录上的文件的链接。
我有这样的文本:"前往我的超赞网站http:\www.google.pl\something\blah\?lang=5"或其他内容,我需要从这条消息中获取此链接。链接也只能以www开头。
我找到了很多关于如何在PHP和其他语言中匹配特定类型的URL的例子。我需要从我的C#应用程序中匹配任何URL。如何操作?当我谈论URL时,我指的是链接到任何站点或站点和子目录上的文件的链接。
我有这样的文本:"前往我的超赞网站http:\www.google.pl\something\blah\?lang=5"或其他内容,我需要从这条消息中获取此链接。链接也只能以www开头。
Regex r = new Regex(@"(?<Protocol>\w+):\/\/(?<Domain>[\w@][\w.:@]+)\/?[\w\.?=%&=\-@/$,]*");
// Match the regular expression pattern against a text string.
Match m = r.Match(text);
while (m.Success)
{
//do things with your matching text
m = m.NextMatch();
}
微软有一张很好的正则表达式页面...这是他们的说法(也非常好用)
^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$
http://msdn.microsoft.com/en-us/library/ff650303.aspx#paght000001_commonregularexpressions
我不确定您的具体问题,但一个好的起点是使用Uri类,该类可以帮助您解析URL。
^http(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$
Regex regx = new Regex("http(s)?://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?", RegexOptions.IgnoreCase);
这将返回一个匹配集合,其中包含在“yourStringThatHasUrlsInIt”中找到的所有匹配项:
var pattern = @"((ht|f)tp(s?)\:\/\/|~/|/)?([w]{2}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?";
var regex = new Regex(pattern);
var matches = regex.Matches(yourStringThatHasUrlsInIt);
返回值将是一个“MatchCollection”,您可以在此处了解更多信息:
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchcollection.aspx
您也可以使用https://github.com/d-kistanov-parc/DotNetUrlPatternMatching
该库允许您将URL与模式匹配。
它的工作原理:
您可以指定通配符*或~ 其中*是组内的任何字符集(方案、主机、端口、路径、参数、片段) 其中~是组段内的任何字符集(主机、路径)
只提供您关心的URL部分。留下的部分将匹配任何内容。例如,如果您不关心主机,则将其留空。
//This code return (protocol://)host:port from URL
//Commented URL's with different protocols. Just uncomment to test.
//string url = "http://www.contoso.com:8080/letters/readme.html";
//string url = "ftp://www.contoso.com:8080/letters/readme.html";
//string url = "l2tp://1.5.8.6:8080/letters/readme.html";
string url = "l2tp://1.5.8.6:8080/letters/readme.html";
string host = "";//empty string with host from url
//protocol, (ip/domain), port
host = Regex.Match(url, @"^(?<proto>\w+)://+?(?<host>[A-Za-z0-9\-\.]+)+?(?<port>:\d+)?/", RegexOptions.None, TimeSpan.FromMilliseconds(150)).Result("${proto}://${host}${port}");
//(ip/domain):port without protocol. If HTTPS board loading images from HTTP host.
//host = Regex.Match(url, @"^(?<proto>\w+)://+?(?<host>[A-Za-z0-9\-\.]+)+?(?<port>:\d+)?/", RegexOptions.None, TimeSpan.FromMilliseconds(150)).Result("${host}${port}");
Console.WriteLine("url: "+url+"\nhost: "+host); //display host