我需要一个regex
来匹配这个模式(使用 C#)
我的比赛必须以 2 个字母字符( MA 或 CA )开头,并且必须以 6 位或 7 位数字结尾;如 CA123456 或 MA123456 或 MA1234567
这是我尝试过的:
Regex.IsMatch(StringInput, @"^[MA]{2}|^[CA]{2}\d{6,7}?"))
不幸的是,它似乎与大多数东西相匹配
试试这个模式:
^[MC]A\d{6,7}$
前导字符类 ( [MC]
)在字符串的开头需要 aM
或 a 。C
之后,\d{6,7}
匹配 6 位或 7 位数字。
您的模式的问题是第一个选择:匹配任何以、、或^[MA]{2}
开头的字符串。它根本不需要任何后续数字。由于正则表达式引擎可以匹配AA1234567之类的字符串的第一个替代项(匹配子字符串AA),因此它甚至不会尝试找到另一个匹配项。这就是为什么AA
AM
MA
MM
它似乎与大多数东西相匹配。
I believe there are great usages of RegEx; in this particular case, using the built-in string functions of C# may be a better option:
This would be the string version based on the above rules:
public static bool IsValid( string str )
{
if( str.Length < 8 )
{
return false;
}
if( !str.StartsWith( "CA" ) && !str.StartsWith( "MA" ) )
{
return false;
}
int result;
string end = str.Substring( str.Length - 6 );
bool isValid = int.TryParse( end, out result );
return isValid;
}