【问题标题】:Regular expression to match Url's, except a certain domain匹配 Url 的正则表达式,除了某个域
【发布时间】:2017-02-17 03:50:01
【问题描述】:

我有以下匹配 Url 的正则表达式。我想要做的是当一个 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;

    }
}

感谢您的帮助

【问题讨论】:

  • 添加负前瞻:^(https?:\/\/)?(?!(?:www\.)?google\.com)([\da-zA-Z.-]+)\.([a-zA-Z\.]{2,6})([\/\w .-]*)*\/?$
  • @anubhava 感谢您的评论。您粘贴的表达式不起作用,但既然我知道负前瞻,我将寻找它并尝试使其起作用。谢谢
  • 提供示例数据和您的正则表达式语言/工具,以便我们进一步挖掘。
  • @anubhava 好的,我添加到问题中

标签: c# regex


【解决方案1】:

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

^(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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多