如果我从空字符串创建正则表达式,如何使它不匹配?
我正在寻找像 RegexOptions.DoNotMatchWithEmpty 或类似的选项。
澄清:
假设我无法控制用于创建 RegEx 的字符串。字符串可以为空,我必须创建 RegEx 对象。我可能可以将 RegEx 设置为 null 并在上游添加大量 null 检查,但我宁愿不这样做。最好的解决方案是 RegexOptions 标志,当 RegEx 使用空字符串构造时,该标志告诉不匹配任何内容。但这不可用。
做这个怎么样
if (string.IsNullOrEmpty(regex))
{
return false;
}
// standard regex lookup goes here
更新:或者只返回一个不匹配的正则表达式
if (string.IsNullOrEmpty(regex))
{
return new Regex("a^");
}
return new Regex(regex);
它之所以有效,是因为该^
字符与正在测试的字符串的开头匹配(除非Multiline
提供了 regex 选项,但事实并非如此),但这显然无法匹配,因为我们已经匹配了另一个字符a
.
尝试以下作为默认值:
Regex.IsMatch(inputString, @"^(?!\s*$).+")
这应该适用于任何非空或非空格的字符串。如果您只想检查 RegEx 是否实际上是一个空字符串,只需使用String.IsNullOrWhitespace
.