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