这个简单的正则表达式与Movie
的文本相匹配。我读错了“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.");
}
}
}
答案 0 :(得分:5)
正如您所说,这意味着“Q重复零或更多次”。在这种情况下,它是零次,因此您实际上是在尝试匹配输入字符串中的""
。由于IsMatch
不关心它匹配的 ,它可以匹配输入字符串中任何位置的空字符串,因此它返回true。
如果您想确保整个输入字符串必须匹配,可以添加^
和$
:"^Q*$"
。
Regex regex = new Regex("^Q*$");
Console.WriteLine(regex.IsMatch("Movie")); // false
Console.WriteLine(regex.IsMatch("QQQ")); // true
Console.WriteLine(regex.IsMatch("")); // true
答案 1 :(得分:2)
你正确地阅读这个正则表达式Q
重复0次或更多次。与之相关的是0
。当你尝试使用正则表达式时,它会尝试找到任何成功的匹配。
正则表达式匹配字符串的唯一方法是尝试匹配一个空字符串(0次),它出现在匹配之间的任何地方,如果之前你不知道,是的,正则表达式可以匹配空字符之间的字符串你可以尝试:
(Q*)
获取捕获组并使用.Matches
和Groups[1].Value
查看已捕获的内容。你会看到它是一个空字符串。
通常,如果要检查字符是否存在,则不要使用正则表达式,而是使用.Contains
。否则,如果你想使用正则表达式,你可以删除量词,或者使用与至少一个特定字符匹配的量词。