Regex reg = new Regex(@"true|false\s*,", RegexOptions.IgnoreCase);
Match m = reg.Match(t);
当t="true,"时m.length=4,当t="false,"时m.length=6
不知道是什么原因

解决方案 »

  1.   

    false\s
    -------------
    注意后面有一个\s,它也会占一个长度的.
      

  2.   

    感觉少个括号
    @"(true|false)\s*,"否则就会成为(true)|(false\s*)
      

  3.   

    是楼主对“|”的理解问题,“|”表示左右两侧为“或”的关系,是以()来进行范围划分的,如果“|”不用()来限定范围,那么它的作用范围即为“|”左右两侧整体true¦false\s*,
    这个正则表达式的意义,就是“true”或者“false\s*,”t="true,"时,正则匹配到的是“true”
    t="false,"时,正则匹配到的是"false,"按楼主的意思,应该改为
    Regex reg = new Regex(@"(true|false)\s*,", RegexOptions.IgnoreCase); 
      

  4.   

    当t="false," ,你这里面正好6个字符,与 false\s  匹配
    Regex   reg   =   new   Regex(@"true ¦false\s*,",   RegexOptions.IgnoreCase); 
    你的正则表达式定义
    @"true",是一种匹配,@"false\s*",是一种匹配。
    当t="true,",你的匹配是"true",所以有4个字符,即length=4。
    当t="false," ,你的匹配是"false," ,注意不是“false”,多了一个字符。因为\s*指代0到多个非空字符。所以逗号正好也是匹配项的。
    所以最后的length=6,而不是5
      

  5.   

    楼上的理解也有误,\s表示的是空格、制表符、换页符等空白字符的其中任意一个“false\s*,”这部分正则表达式
    在t="false," 时
    这里的\s*是不匹配任何内容的,由\s*后的“,”来匹配"false,"中的“,”,最后的m.length=6是false的5个字符加“,”为6个字符