第一种以 \number的反向引用
reg = <?<name>\w{3}>\s*\1 第二种以 \k<name>的反向引用
reg = <?<name>\w{3}>\s*\k<name> 但是我用以下的也是可以的
reg = <?<name>\w{3}>\s*\<name> 
也就是不要\k<name> 改为 \<name>第三种正确吗?

解决方案 »

  1.   

    这个,楼主这算是哪种语言支持的语法?据我所知,所有支持捕获组的语言,都是以()作为捕获组的捕获组有匿名捕获组和命名捕获组之分
    匿名捕获组:(expression)
    命名捕获组:(?<name>expression),另一种形式(?'name'expression)
    大多数语言支持匿名捕获组,可以通过编号对其进行访问,目前只有少数语言中支持命名捕获组,可以通过名称对其进行访问相应的,反向引用也有针对匿名捕获组和命名捕获组的引用
    匿名捕获组反向引用:\number
    命名捕获组反向引用:\k<name>或\k'name'
    当然,命名捕获组也是参与编号的,也可以通过\number进行反向引用,只不过规则是先进行匿名捕获组的编号,然后才进行命名捕获组的编号楼主所给的那三种表达式都是错的
    Regex reg1 = new Regex(@"(?<name>\w{3})\s*\1");
    Regex reg2 = new Regex(@"(?<name>\w{3})\s*\k<name>");
    Regex reg3 = new Regex(@"(?<name>\w{3})\s*\k'name'");
      

  2.   

    命名捕获组也是参与编号的,也可以通过\number进行反向引用,只不过规则是先进行匿名捕获组的编号,然后才进行命名捕获组的编号果然是这样啊。。
      

  3.   

    er...
    没错的哦。那个c#字符串和正则表达式的书,楼主再看,我也就翻出来带在路上翻翻复习,的确有这样写法哦。(?<xx>a)\w+?\'xx'
    (?<xx>a)\w+?\<xx>
    都是可以的
      

  4.   

    谢谢逍遥兄。。
    我也测试n次也是可以的。。
    我晚上回去翻翻书。但好像只写了\k<name>的写法
    3q
      

  5.   

    k可以省略,我也不知道这个,也是你看这个书,我才那天翻出来,装包里温故而知新中
    才知道k可以省略。
    分组的写法好几种。不过常用的还是\k<name>和\分组编号
    习惯就好。:)
    今天带小孩,偷闲来看看论坛,阿捷兄最近忙了啊。
      

  6.   

    试了下,确实可以,汗早上也是测试过的,忘了用什么例子测的不可以了其实这个有点类似于
    [^]]*
    这种语法,按道理是不应该支持的,但.NET还就是支持,看来.NET中对正则的支持比我想象的强大不过这种用法不符合常规,可读性也比较差,了解一下就好,建议实际应用中不要使用
      

  7.   

    哦。原来这样。我那时是乱写的。还一直以为正确。汗。。
    http://forum.csdn.net/PointForum/Forum/PostTopic.aspx?forumID=56eedeb3-d039-46aa-8bdd-33a5c45be40e
    顺便帮帮忙。
      

  8.   

    小孩应该睡得比较多吧。逍遥兄应该很多时间来csdn了
      

  9.   

    http://topic.csdn.net/u/20100831/15/9429ed4c-4c94-4382-af74-6a3f29b54c14.html
    是这个帖子。。写错啦。一时按快了