【问题标题】:Regular Expression Help NOT Contains正则表达式帮助不包含
【发布时间】:2011-11-01 04:16:40
【问题描述】:

我已经旋转我的轮子很长一段时间了。我需要一个符合以下条件的正则表达式:

anytextherethatdoesNOTcontainDEVString@mail.mydomain.com

例如:

first.last@mail.mydomain.com //match
firstLast@mail.mydomain.com //match
name@mail.mydomain.com //match
dev.test@mail.mydomain.com //NON-match contains "dev" string case non-sensitive
dev@mail.mydomain.com //NON-match contains "dev" string case non-sensitive

【问题讨论】:

  • boolean matches = !regex.matches();
  • 对于这么简单的事情,为什么不简单地使用简单的字符串搜索呢?正则表达式适用于“复杂”模式,但您只想查看是否存在 3 个字符“dev”。正则表达式是巨大的矫枉过正。
  • 我需要 REGEX 的原因是因为我想要灵活地更改匹配/搜索字符串,而无需重新编译和重新部署应用程序。相反,我在配置文件中更改了正则表达式。

标签: c# javascript regex


【解决方案1】:

这个正则表达式应该可以工作(与不区分大小写的标志一起使用):

 "^(?:(?!dev).)+@mail\.mydomain\.com$"

http://rubular.com/r/hnuvlQorQl

【讨论】:

    【解决方案2】:

    这里,如果没有匹配“dev”的一行

    // for each line input    
    Match match = Regex.Match(input, @"dev", RegexOptions.IgnoreCase);     
    if (!match.Success) {       
    // here you have non matching     
    }
    

    【讨论】:

      【解决方案3】:

      试试这个:

          string[] array = { "first.last@mail.mydomain.com", "firstLast@mail.mydomain.com", "name@mail.mydomain.com", "dev.test@mail.mydomain.com", "dev@mail.mydomain.com", "anytextherethatdoesNOTcontainDEVString@mail.mydomain.com" };
          Regex reg = new Regex(@"(?is)^(?!.*?dev).+@mail\.mydomain\.com$");
          foreach (string s in array)
              Console.WriteLine(reg.IsMatch(s));
      

      【讨论】:

        【解决方案4】:

        如果您只是想确定“dev”是否出现在这些字符串中的任何位置:

        var addresses = new[] {
            "first.last@mail.mydomain.com",
            "DeV.test@mail.mydomain.com",
            "first.last@dev.mydomain.com"
        };
        foreach(var address in addresses)
        {
            // unfortunately C#'s String.Contains does not have an ignore case option
            // hack to use indexOf instead (which does provide such an option)
            var hasDev = (address.IndexOf("dev", StringComparison.OrdinalIgnoreCase) != -1);
            Console.WriteLine("{0} contains dev: {1}", address, hasDev);
        }
        

        输出

        first.last@mail.mydomain.com contains dev: false
        DeV.test@mail.mydomain.com contains dev: true
        first.last@dev.mydomain.com contains dev: true
        

        或者,如果您只想检查“@”左侧的地址部分,则可以使用带有Regex.IsMatch() 的简单正则表达式:

        var addresses = new[] {
            "first.last@mail.mydomain.com",
            "DeV.test@mail.mydomain.com",
            "first.last@dev.mydomain.com"
        };
        var pattern = @"dev.*@";
        foreach(var address in addresses)
        {
            var hasDevOnLeft = Regex.IsMatch(address, pattern, RegexOptions.IgnoreCase);
            Console.WriteLine("{0} matches: {1}", address, hasDevOnLeft);
        }
        

        输出

        first.last@mail.mydomain.com matches: false
        DeV.test@mail.mydomain.com matches: true
        first.last@dev.mydomain.com matches: false
        

        【讨论】:

          猜你喜欢
          • 2011-08-18
          • 2011-06-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多