用于匹配Url的正则表达式,但某个域除外

时间:2017-02-16 17:31:16

标签: c# regex

我有以下与Url匹配的正则表达式。我想要做的是当网址属于某个域时使其不匹配,让我们说google.com。

我该怎么做?我一直在阅读其他问题和正则表达式引用,到目前为止我可以实现它。我的正则表达式:

^(https?:\/\/)?([\da-zA-Z\.-]+)\.([a-zA-Z\.]{2,6})([\/\w \.-]*)*\/?$

我用它来过滤聊天中的消息,我使用C#这样做。这是一个工具,以防你想进一步挖掘:http://regexr.com/3faji

C#扩展方法:

static class String
{
    public static string ClearUrl(string text)
    {
        Regex regx = new Regex(@"^(https?:\/\/)?([\da-zA-Z\.-]+)\.([a-zA-Z\.]{2,6})([\/\w \.-]*)*\/?$",
        RegexOptions.IgnoreCase);
        string output = regx.Replace(text, "*");

        return output;

    }
}

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

您可以在正则表达式中使用否定前瞻以避免匹配某些域:

^(https?:\/\/)?(?!(?:www\.)?google\.com)([\da-zA-Z.-]+)\.([a‌​-zA-Z\.]{2,6})([\/\w .-]*)*\/?$

否则:

^(https?:\/\/)?(?!.*google\.com)([\da-zA-Z.-]+)\.([a‌​-zA-Z\.]{2,6})([\/\w .-]*)*\/?$

(?!(?:www\.)?google\.com)是否定前瞻,当我们提前www.google.comgoogle.com时会断言失败。

RegEx Demo

答案 1 :(得分:1)

这应该使用否定前瞻,并且还包括以www而不是协议开头的URL,也不是行的第一个字符:

((http|ftp|https):\/\/|www.)(?!google|www.google)[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?