【发布时间】:2010-07-08 22:48:45
【问题描述】:
假设 input = "Hello" 并且模式是 "World" 我想确定输入中没有出现 thr 模式。 由于模式没有出现在输入 Regex.IsMatch 应该返回 true。
如何在 C# 中编写模式
【问题讨论】:
假设 input = "Hello" 并且模式是 "World" 我想确定输入中没有出现 thr 模式。 由于模式没有出现在输入 Regex.IsMatch 应该返回 true。
如何在 C# 中编写模式
【问题讨论】:
您可以使用zero-width, negative lookahead assertion:
Regex.IsMatch("Hello", "(?!World)") // Returns true
但我只是在您不完全做到并且仅做到这一点(当您可以否定IsMatch结果时)的条件下向您提供该信息,而是想要拥有在更明智的地方某个地方的否定断言。
【讨论】:
通常您不会使用正则表达式来检查某个子字符串是否不存在。
虽然在某些(正则表达式实现)中可以使用零宽度负环视 (see this answer),但不一定对每个输入都可行。当您想通过断言某些子情况在匹配之前/之后/内部不存在来避免正则表达式中的指数匹配失败时,主要使用负前瞻/后置断言。它们也(更常用)用于搜索不能在某些其他模式之前或之后的匹配项。
相反,只需检查输入中是否存在模式,然后返回 Regex.IsMatch 的否定:
var input = "Hello";
var regEx = new Regex("World");
return !regEx.IsMatch(input);
【讨论】: