(?<=\\G.{3})abcdefghijkl这个字符串利用上面那个正则进行split,会变成
abc,def,hgi,jkl谁给解释一下那个正则是怎么进行匹配的。

解决方案 »

  1.   

    分解如下~(?<=...断言符号
    \G 目标中的第一个匹配位置
    .{3} 任意字符出现三次
      

  2.   

    ?<=3 是逢3或者长度小于3
    \G 上一个匹配的结尾 
      

  3.   

    这个是java里面的正则吗?
    (?<=regex)
    应该是反向预搜索,只能提供判断这个regex是否存在吧如果简单只进行split的功能  .{3} 就可以 
    .{3}  以3个字符分割
      

  4.   

    我来解释下吧,首先是整个字符串"abcdefghijkl"进来,那么split("(?<=\\G.{3})")就开始分割,由于一开始没有上一个匹配内容因此\\G就在a的前面
    然后向后移三位,abc|defghijkl 这样就以整个"defghijkl"为依据进行分割,这时只有abc符合条件,则abc放入s[0]中,然后\\G到了c的后面,此时的abc已经被吃掉,
    接下来就是等同与split("(?<=\\G.{3})")来操作"defghijkl",同样是进行前面的动作.以此类推这是我的个人的看法,不知道这样的解释是否正确,期待更好的答案
      

  5.   

    匹配以上次匹配结果开头的后三个字符\G的作用有点类似于组捕获匹配的顺序是这样的
    1.abc
    2.abcdef
    3.abcdefghi
    4.abcdefghijkl
    红颜色的是匹配字符,黄颜色的是lookahead查找的字符串,纠正一下8楼的说法,正则里的断言符不是吃掉
    字符,比如说(?<=),官方解释就是lookahead,就是查找看前面有没有这个字符,也就是说匹配的指针停在
    当前位置,然后往前看。楼主要是实在想不通,把这个正则表达式改为(? <=.{3}) ,然后试一下,就会恍然大悟了