哪个正则表达式适合从HTML中提取url
本文关键字:HTML 提取 url 正则表达式 | 更新日期: 2023-09-27 18:14:36
我试过使用我自己的,并在StackOverflow上使用顶部的,但它们中的大多数都比预期的更匹配。
例如,有些人会从输入的...http://foo.com/hello?world<br>...
中提取http://foo.com/hello?world<br
(注意最后的<br
)。
是否有一种模式可以更可靠地匹配URL ?
这是我当前使用的模式:
@"((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(''''))+['w'd:#@%/;$()~_?'+-='''.&^]*)"
最安全的正则表达式是根本不使用正则表达式,而使用System。Uri类。
系统。Uri
Uri uri = new Uri("http://myUrl/%2E%2E/%2E%2E");
Console.WriteLine(uri.AbsoluteUri);
Console.WriteLine(uri.PathAndQuery);
您的正则表达式需要转义最后一个字符组中的"-":
@"((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(''''))+['w'd:#@%/;$()~_?'+'-='''.&^]*)"
实际上,您允许从+到=的字符,其中包括<</p>
试试这个:
public static string[] Parse(string pattern, string groupName, string input)
{
var list = new List<string>();
var regex = new Regex(pattern, RegexOptions.IgnoreCase);
for (var match = regex.Match(input); match.Success; match = match.NextMatch())
{
list.Add(string.IsNullOrWhiteSpace(groupName) ? match.Value : match.Groups[groupName].Value);
}
return list.ToArray();
}
public static string[] ParseUri(string input)
{
const string pattern = @"(?<Protocol>'w+):'/'/(?<Domain>['w@]['w.:@]+)'/?['w'.?=%&='-@/$,]*";
return Parse(pattern, string.Empty, input);
}