为什么要求7个字符的C#正则表达式接受8个字符?

时间:2016-01-23 16:24:58

标签: c# regex

我有一个C#正则表达式,我希望匹配7个字符:

string digits4 = "\\d{4}";
string allowable3 = "[a-zA-z0-9 $%&#?+=!]{3}";
Regex regex1 = new Regex(digits4 + allowable3);

allowable3用于匹配三个字母,数字或任何后续字符。但是,以下内容返回true:

regex1.IsMatch("1234abc^")

这让我感到困惑有两个原因:

  1. 匹配的模式有8个字符。
  2. allowable3不包括" ^"。 我必须在我的" positive character group"中进行一些额外的,意外的外卡匹配。 (方括号内的部分),但我没有看到它。

1 个答案:

答案 0 :(得分:4)

使用锚点^和$围绕模式以要求完整的字符串匹配。当模式未锚定时,IsMatch搜索部分匹配。

您的A-z模式不仅仅匹配字母,还匹配^和其他一些符号。您需要将其更改为A-Za-z。

string allowable3 = "[a-zA-Z0-9 $%&#?+=!]{3}";
Regex regex1 = new Regex("^" + digits4 + allowable3 + "$");