我有一个要匹配7个字符的C#正则表达式:

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


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

regex1.IsMatch("1234abc^")


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


匹配的模式有8个字符。
allowable3不包含“ ^”。
我必须在“ positive character group”(方括号内的部分)中进行一些其他意外的通配符匹配,但是我没有看到它。

最佳答案

使用锚^和$将模式四舍五入以要求完整的字符串匹配。当模式未锚定时,IsMatch搜索部分匹配项。

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

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

09-11 17:44