Url轉Link的C#正則表達式


網上關於Url轉鏈接(href)的正則表達式一搜一大堆,但真正好用的沒幾個。

后來在Matthew O'Riordan的Blog上發現一個很好用的正則表達式,是用Javascript寫的,代碼如下:

(
  ( // brackets covering match for protocol (optional) and domain
    ([A-Za-z]{3,9}:(?:\/\/)?) // match protocol, allow in format http:// or mailto:
    (?:[\-;:&=\+\$,\w]+@)? // allow something@ for email addresses
    [A-Za-z0-9\.\-]+ // anything looking at all like a domain, non-unicode domains
    | // or instead of above
    (?:www\.|[\-;:&=\+\$,\w]+@) // starting with something@ or www.
    [A-Za-z0-9\.\-]+   // anything looking at all like a domain
  )
  ( // brackets covering match for path, query string and anchor
    (?:\/[\+~%\/\.\w\-]*) // allow optional /path
    ?\??(?:[\-\+=&;%@\.\w]*) // allow optional query string starting with ? 
    #?(?:[\.\!\/\\\w]*) // allow optional anchor #anchor
  )? // make URL suffix optional
)

針對我們的使用場景(只對http或https開頭的Url進行轉換)簡化了一下,並用C#寫出:

public static class ContentFormatter
{
    private static readonly Regex Url_To_Link = new Regex(@"(?<url>
        (https?:(?:\/\/)?)        # match protocol, allow in format http:// or https://
        [A-Za-z0-9\.\-]+          # anything looking at all like a domain, non-unicode domains        
        (                         # brackets covering match for path, query string and anchor
        (?:\/[\+~%\/\.\w\-]*)?    # allow optional /path
        \??(?:[\-\+=&;%@\.\w]*?)  # allow optional query string starting with ? 
        \#?(?:[\.\!\/\\\w\-]*)      # allow optional anchor #anchor
        )?                        # make URL suffix optional
        )",
        RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace,
        TimeSpan.FromMilliseconds(100));

    public static string UrlToLink(string text)
    {
        if (string.IsNullOrEmpty(text)) return string.Empty;

        return Url_To_Link.Replace(text, "<a href=\"${url}\" target=\"_blank\">${url}</a>");
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM