Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 防止空正则表达式匹配所有内容_C#_Regex - Fatal编程技术网

C# 防止空正则表达式匹配所有内容

C# 防止空正则表达式匹配所有内容,c#,regex,C#,Regex,如果我从一个空字符串创建一个正则表达式,如何使它不匹配 我在找一个像RegexOptions.DoNotMatchWithEmpty之类的选项 澄清: 假设我无法控制用于创建正则表达式的字符串。字符串可以为空,我必须创建RegEx对象。我可能可以将RegEx设置为null,并在上游添加大量null检查,但我不希望这样做。最好的解决方案应该是一个RegexOptions标志,当RegEx是用空字符串构造时,它告诉我们什么都不匹配。但该选项不可用。请尝试以下默认选项: Regex.IsMatch(i

如果我从一个空字符串创建一个正则表达式,如何使它不匹配

我在找一个像RegexOptions.DoNotMatchWithEmpty之类的选项

澄清:


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

请尝试以下默认选项:

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

这应该适用于任何非空或非空白的字符串。如果您只想检查正则表达式是否实际上是空字符串,只需使用
string.IsNullOrWhitespace

作为默认值,尝试以下操作:

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

这应该适用于任何非空或非空白的字符串。如果您只想检查正则表达式是否实际上是空字符串,只需使用
string.IsNullOrWhitespace

这样做怎么样

if (string.IsNullOrEmpty(regex))
{
    return false;
}
// standard regex lookup goes here
更新:或者直接返回


它之所以能工作,是因为
^
字符匹配被测试字符串的开头(除非提供了
多行
正则表达式选项,而不是),但是这显然不能匹配,因为我们已经匹配了另一个字符,
a

这样做怎么样

if (string.IsNullOrEmpty(regex))
{
    return false;
}
// standard regex lookup goes here
更新:或者直接返回



它之所以有效,是因为
^
字符与被测试字符串的开头匹配(除非提供了
多行
正则表达式选项,而不是),但是这显然无法匹配,因为我们已经匹配了另一个字符,
a

首先测试字符串是否为空?您的意思是什么?为什么要这样做?你已经试过什么了?我对这个问题做了一些澄清。我看不出这个检查背后的理由。regex
“”
与空字符串正确匹配。根据您使用它的方式,它还可以匹配非空字符串中的许多位置(每两个字符之间以及字符串的开头和结尾各一次)。我可以想到许多其他的正则表达式都有相同的行为,例如
“()”
——仅仅检查一个空字符串对你没有帮助。即使是
“*?”
也会匹配空字符串(如果可以)。如果用户提供了
“*?”
,这是可以的,因为这是有意的。空的正则表达式字符串意味着用户很可能忘记设置它,并且不打算匹配所有内容。在这个特殊的程序中,有一个测试过的正则表达式列表。从列表顶部的空字符串创建的正则表达式将匹配并停止搜索。这就是我想要阻止的。首先测试字符串是否为空?您的意思是什么?为什么要这样做?你已经试过什么了?我对这个问题做了一些澄清。我看不出这个检查背后的理由。regex
“”
与空字符串正确匹配。根据您使用它的方式,它还可以匹配非空字符串中的许多位置(每两个字符之间以及字符串的开头和结尾各一次)。我可以想到许多其他的正则表达式都有相同的行为,例如
“()”
——仅仅检查一个空字符串对你没有帮助。即使是
“*?”
也会匹配空字符串(如果可以)。如果用户提供了
“*?”
,这是可以的,因为这是有意的。空的正则表达式字符串意味着用户很可能忘记设置它,并且不打算匹配所有内容。在这个特殊的程序中,有一个测试过的正则表达式列表。从列表顶部的空字符串创建的正则表达式将匹配并停止搜索。这就是我想要阻止的。无论输入字符串是否为空,都必须创建RegEx对象。请看我的说明。@mikoro然后返回一个与我刚才想的任何内容都不匹配的正则表达式。是否有一个正则表达式与任何东西都不匹配?当然,我可以生成一些长的随机字符串。无论输入字符串是否为空,都必须创建RegEx对象。请看我的说明。@mikoro然后返回一个与我刚才想的任何内容都不匹配的正则表达式。是否有一个正则表达式与任何东西都不匹配?当然,我可以生成一些长的随机字符串。对不起,这不能回答我的问题。在我的例子中,输入字符串将是IsMatch函数的第二个参数。你不必这么做。对不起,这不能回答我的问题。在我的例子中,输入字符串将是IsMatch函数的第二个参数。你不必这么做。