C# 正则表达式奇怪,为什么会发生这种情况?
此简单正则表达式与C# 正则表达式奇怪,为什么会发生这种情况?,c#,regex,C#,Regex,此简单正则表达式与电影的文本匹配。我把这个理解为“Q重复了零次或更多次”是错的吗?为什么它匹配,它不应该返回false吗 public class Program { private static void Main(string[] args) { Regex regex = new Regex("Q*"); string input = "Movie"; if (regex.IsMatch(input)) {
电影
的文本匹配。我把这个理解为“Q重复了零次或更多次”是错的吗?为什么它匹配,它不应该返回false吗
public class Program
{
private static void Main(string[] args)
{
Regex regex = new Regex("Q*");
string input = "Movie";
if (regex.IsMatch(input))
{
Console.WriteLine("Yup.");
}
else
{
Console.WriteLine("Nope.");
}
}
}
正如你所说的,它的意思是“Q重复零次或更多次”。在这种情况下,它是零次,因此您实际上是在尝试匹配输入字符串中的
“
”。因为它不关心匹配的位置,所以它可以在输入字符串中的任何位置匹配空字符串,所以它返回true
如果要确保整个输入字符串必须匹配,可以添加^
和$
:“^Q*$”
您正确地阅读了这个正则表达式,因为它重复了0次或更多次。这就是
0
。当您尝试正则表达式时,它将尝试查找任何成功的匹配项
正则表达式匹配字符串的唯一方法是尝试匹配空字符串(0次),它出现在匹配之间的任何位置,如果您以前不知道,是的,正则表达式可以匹配字符之间的空字符串。您可以尝试:
(Q*)
获取捕获组并使用.Matches
和组[1]。Value
查看捕获的内容。您将看到它是一个空字符串
通常,如果要检查字符是否存在,不使用正则表达式,而是使用。否则,如果您确实想使用正则表达式,您应该删除量词,或者使用至少匹配一个特定字符的量词。尝试
\Q{0,}
并查看这是否适用于您是的,它匹配,不匹配,零时间
。打印匹配结果以查看它是否不匹配。您为引擎提供了一个选项,可以将事物与*
?
{0,n}
量词进行匹配。^Q*$
的负等价物^[^Q]+$
。我想空字符串可能是有效的,但它很少用正则表达式这样验证。@sln我不知道你想用它说什么。匹配空字符串的目的是什么?@sln在许多有效的用例中,接受空匹配是绝对正确的。验证就是一个例子(例如,“我不在乎您是否输入了值,但当您输入值时,请使用正确的格式”)。另外,OP显然知道Q*
可以匹配空字符串,因此这很可能是期望的行为。我真的不明白你的意思。Q*
也匹配非空字符串。他没有使用开始/结束锚。必需输入没有空字符串选项,可能不应验证可选输入。如果需要验证,则需要对无效性进行单数阳性检查。事实上,大多数需要严格格式的输入应该是事件驱动的,不允许无效的按键或粘贴无效的字符。这是一个有效的观点还是我偏离了底线?
(Q*)