防止空RegEx匹配所有内容

时间:2012-10-16 12:40:34

标签: c# regex

如果我从一个空字符串创建一个RegEx,我该怎么做才能使它匹配?

我正在寻找像RegexOptions.DoNotMatchWithEmpty这样的选项。

澄清:

假设我无法控制用于创建RegEx的字符串。字符串可以为空,我必须创建RegEx对象。我可能可以将RegEx设置为null并在上游添加大量空值检查,但我宁愿不这样做。最好的解决方案是RegexOptions标志,当RegEx用空字符串构造时,该标志告诉我们什么都不匹配。但那是不可用的。

2 个答案:

答案 0 :(得分:3)

如何做到这一点

if (string.IsNullOrEmpty(regex))
{
    return false;
}
// standard regex lookup goes here

更新:或者只返回a regular expression that matches nothing

if (string.IsNullOrEmpty(regex))
{
    return new Regex("a^");
}
return new Regex(regex);

它的工作原理是因为^字符与正在测试的字符串的开头匹配(除非提供了Multiline正则表达式选项,但它不是),但是这显然无法匹配已匹配另一个字符a

答案 1 :(得分:1)

请尝试以下默认设置:

Regex.IsMatch(inputString, @"^(?!\s*$).+")

这适用于任何非空或空格的字符串。如果您只想检查RegEx实际上是否为空字符串,请使用String.IsNullOrWhitespace