preg_match_all("/<\?(?:(\d)|=)?/", "<?10", $mat)) 
//这个结果是
    [0] => Array
        (
            [0] => <?1
            [1] => 1//为什么会有它
        )preg_match_all("/<\?(?:\d|=)?/", "<?10", $mat)) 
//这个结果是
    [0] => Array
        (
            [0] => <?1
        )
//第一个多了一个小括号

解决方案 »

  1.   

    你要看手册,手册的例子说得很明白的
    [0]表示整个正则匹配到的
    [1]表示第一对小括号匹配到的
    [2]表示第二对小括号匹配到的
    ……(?: )则表示不进行匹配,所以没有进入到结果数组
      

  2.   

    多一对括号就多一组咯,以括号分组的。
      

  3.   

    它会拿里面的括号再去匹配已经匹配到的结果
    是不是这样
      

  4.   

    原理来说——N,虽然结果看上去是这样