【问题标题】:How to specify pattern that should not match如何指定不应该匹配的模式
【发布时间】:2010-07-08 22:48:45
【问题描述】:

假设 input = "Hello" 并且模式是 "World" 我想确定输入中没有出现 thr 模式。 由于模式没有出现在输入 Regex.IsMatch 应该返回 true。

如何在 C# 中编写模式

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    您可以使用zero-width, negative lookahead assertion

    Regex.IsMatch("Hello", "(?!World)") // Returns true
    

    但我只是在您完全做到并且仅做到这一点(当您可以否定IsMatch结果时)的条件下向您提供该信息,而是想要拥有在更明智的地方某个地方的否定断言。

    【讨论】:

      【解决方案2】:

      通常您不会使用正则表达式来检查某个子字符串是否不存在。

      虽然在某些(正则表达式实现)中可以使用零宽度负环视 (see this answer),但不一定对每个输入都可行。当您想通过断言某些子情况在匹配之前/之后/内部不存在来避免正则表达式中的指数匹配失败时,主要使用负前瞻/后置断言。它们也(更常用)用于搜索不能在某些其他模式之前或之后的匹配项。

      相反,只需检查输入中是否存在模式,然后返回 Regex.IsMatch 的否定:

      var input = "Hello";
      var regEx = new Regex("World");
      return !regEx.IsMatch(input);
      

      【讨论】:

      • 问题是模式来自配置文件,我想以任何一种方式运行相同的匹配
      猜你喜欢
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 2014-08-06
      相关资源
      最近更新 更多