当尝试在C#中编写Regex表达式时,正则表达式本身是正确的并匹配字符串:
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”,它将显示正则表达式匹配,这是预期的结果,但如果我也放“01446847362word”,它也会显示它是正确的。
我可以添加到我的正则表达式中以使其切断吗?
答案 0 :(得分:6)
你的正则表达式包含一个替换,这意味着它可以捕获:
^0[0-9]{10}
或者:
\(0[0-9]{4}\)[0-9]{6}$
因此,您必须注意,任何一方都不包含两个 ^
行首和$
行结束匹配,这是您确保整个字符串都匹配。
尝试以下操作,将^
和$
移到更改之外(现在位于其自己的组中):
String telRegex = @"^((0[0-9]{10})|(\(0[0-9]{4}\)[0-9]{6}))$";
答案 1 :(得分:0)
作为替代方案,您可以使用conditional matching with expression。虽然模式的长度与@ Iridium的相同,但这表明在Regex中总有几种方法可以做同样的事情:
this.socket