Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式匹配2个字母加上C中的6个数字#_C#_Regex - Fatal编程技术网

C# 正则表达式匹配2个字母加上C中的6个数字#

C# 正则表达式匹配2个字母加上C中的6个数字#,c#,regex,C#,Regex,我需要一个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])要求在字符串的开头有M或C。之后,\d{6,7}匹配6位或7位数字 模式

我需要一个
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]
)要求在字符串的开头有
M
C
。之后,
\d{6,7}
匹配6位或7位数字


模式的问题是第一种选择:
^[MA]{2}
匹配以
AA
AM
MA
MM
开头的任何字符串。它根本不需要以下任何数字。由于正则表达式引擎可以为类似AA1234567的字符串(匹配子字符串AA)匹配第一个备选字符串,因此它甚至不会尝试找到另一个匹配。这就是为什么

它似乎和大多数东西都相配


我相信正则表达式有很多用法;在这种特殊情况下,使用C#的内置字符串函数可能是更好的选择:

  • 必须以MA或CA开头
  • 必须以至少6位结束(如果有7位,则将有6位)
  • 结合1和2,字符串长度必须至少为8个字符
  • 这将是基于上述规则的字符串版本:

    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;
    }
    
    公共静态bool有效(字符串str)
    {
    如果(str.Length<8)
    {
    返回false;
    }
    如果(!str.StartsWith(“CA”)和&!str.StartsWith(“MA”))
    {
    返回false;
    }
    int结果;
    字符串结束=str.Substring(str.Length-6);
    bool isValid=int.TryParse(结束,输出结果);
    返回有效;
    }
    
    对此非常感谢@用户2976464很高兴我能帮忙。如果这个答案解决了你的问题,请务必接受。