哪个正则表达式适合从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:#@%/;$()~_?'+-='''.&^]*)"

哪个正则表达式适合从HTML中提取url

最安全的正则表达式是根本不使用正则表达式,而使用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);
    }