我用的表达式是“(.)\1(.)\2”,看起来貌似很。比如测试字符串“1122gffee”,里面有aabb类似的都会显示出来,可是它包含了子匹配,我记得用?:可以去除字匹配的,然后我修改表达式为“(?:.)\1(?:.)\2”,可是却不能匹配呢?

解决方案 »

  1.   

    不是吧“.{1}”等价于“.”对于字符串“1234fa1234gferljjrrttljwwoofa”,我用“(.)\1(.)\2”得出的結果是:
    1.jjrr
    (1).j (2).r 
    2.wwoo
    (1).w (2).o 用(?:.)\1(?:.)\2匹配不到結果,沒道理的啊,請問如何修改可以不匹配子的?
      

  2.   

    (?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。 
      

  3.   

    楼主想说貌似很什么呢其实如果你要求的是aabb,而不仅仅是aaaa的话,那就只能用
    (.)\1(.)\2
    当然,上面的表达式是包含aaaa的,如果只能是aabb,而不包含aaaa的话,还需要加限制的
    (.)\1((?!\1).)\2要使用反向引用\number,就一定要有对应的捕获组,否则就是错的
    (?:.)\1(?:.)\2
    这里的捕获组都变成非捕获组了,\1和\2引用的是什么呢?当然不会得到结果了
    要使用反向引用,子匹配是必须付出的代价
    反向引用,参考
    正则基础之——反向引用
    至于什么时候用到非捕获组,参考
    正则基础之——非捕获组