C# 正则表达式允许额外的字符
尝试用C#编写正则表达式时,正则表达式本身是正确的,并且与字符串匹配:C# 正则表达式允许额外的字符,c#,regex,C#,Regex,尝试用C#编写正则表达式时,正则表达式本身是正确的,并且与字符串匹配: String telRegex = @"(^0[0-9]{10})|(\(0[0-9]{4}\)[0-9]{6}$)"; Match telRegexResult = Regex.Match(textBox1.Text, telRegex); if (telRegexResult.Success) { MessageBox.Show("Your Regex Matches!"); } else MessageBox.
String telRegex = @"(^0[0-9]{10})|(\(0[0-9]{4}\)[0-9]{6}$)";
Match telRegexResult = Regex.Match(textBox1.Text, telRegex);
if (telRegexResult.Success) {
MessageBox.Show("Your Regex Matches!");
} else MessageBox.Show("Your Regex doesn't match!");
如果我输入“01446847362”,它将显示正则表达式匹配,这是预期的结果,但是如果我也输入“01446847362”,它也将显示它是正确的
有什么我可以添加到我的正则表达式中使其关闭的吗?您的正则表达式包含一个替代项,这意味着它可以捕获:
^0[0-9]{10}
或:
\(0[0-9]{4}\)[0-9]{6}$
因此,您将注意到,任何一方都不包括^
行开始匹配和$
行结束匹配,这是确保整个字符串匹配所需的
尝试以下操作,将^
和$
移动到备选方案之外(现在位于其自己的组中):
作为替代方案,您可以使用。尽管模式的长度与@Iridium的长度相同,但这表明在正则表达式中总是有几种方法可以完成相同的事情:
string pattern = @"^0(?'p'\()?[0-9]{4}(?('p')\))[0-9]{6}$";
string pattern = @"^0(?'p'\()?[0-9]{4}(?('p')\))[0-9]{6}$";