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>");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值