本帖最后由 evila 于 2012-04-20 02:27:27 编辑

解决方案 »

  1.   

    $str = '<AAA:BBB id="20" size="large" />';
    preg_match_all('/[:"](\w+)/i', $str, $reg);
    print_r($reg[1]);Array
    (
        [0] => BBB
        [1] => 20
        [2] => large
    )
      

  2.   


    你好,为什么我使用preg_replace_callback 函数用这个规则写得到的数据和你测试的一样,用preg_match_all 就是正常的
      

  3.   

    上面打错字了,这CSDN又不能编辑应该是为什么我使用preg_replace_callback 函数用这个规则写得到的数据和你测试的不一样,用preg_match_all 就是正常的
      

  4.   

    $s = '<h2>请投票</h2><de:test id="3" size="small" /><div>本投票最终解释权归我所有</div>';
    $s = preg_replace_callback('/[:"](\w+)/i','callbackfunc',$s);function callbackfunc($arr)
    {
      return print_r($arr[1]);
    }
      

  5.   

    把文本里所有匹配的标签改成我函数里处理过后的字符串function callbackfunc($arr)
    {
      $ret = '编号:'.$arr[1][1];
      $ret .= '大小:'.$arr[1][2];  return $ret
    }如果用print_r直接打印好像没有问题,但是我这样做,就有引号
      

  6.   

    $s = '<h2>请投票</h2><de:test id="3" size="small" /><div>本投票最终解释权归我所有</div>';
    echo $s = preg_replace_callback('/[:"](\w+)"?/i','callbackfunc',$s);function callbackfunc($arr)
    {
      $ret = '编号:'.$arr[1];
      $ret .= '大小:'.$arr[1];  return $ret;
    }
    <h2>请投票</h2><de编号:test大小:test id=编号:3大小:3 size=编号:small大小:small /><div>本投票最终解释权归我所有</div>
      

  7.   


    你这样明显是没有经过测试的,你看callbackfunc这个函数,编号 和大小 都是 $arr[1]……
      

  8.   

    如果未经测试,我不会给出结果串!preg_replace_callback 传给回调函数的只是一个一维数组,不存在你 #9 的数组元素你示例的串与提出的问题及期望的结果明显不符
    让人无所适从
      

  9.   

    preg_replace_callback/preg_replace默认就是all,也就是limit==-1。callback的返回值将作为一个整体替代//匹配的内容,楼主是不是理解有误http://jp.php.net/preg_replace_callback
      

  10.   

    从一串字符中用正则提取进来进行处理,这很难人让人理解吗?如果我说的字符串是:
    $str = '<AAA:BBB id="20" size="large" />'; 就非得是这样子?不能是
    $s = '<h2>请投票</h2><de:test id="3" size="small" /><div>本投票最终解释权归aaa所有</div>';这应该不算是变化吧?如果我没有运行,我怎么敢乱否定的意见
    <?php
    function callbackfunc($arr)
    {
      $data = $arr[1];  print_r($arr[1]);
    }$s = '<h2>请投票</h2><de:test id="3" size="small" /><div>本投票最终解释权归所有</div>';preg_replace_callback('/[:"](\w+)"?/i','callbackfunc',$s);?>
    运行结果是:test3small,就是字符串,非数组。
      

  11.   

    你就把想得到的结果贴出来吧 
    比如 $s = '<h2>请投票</h2><de:test id="3" size="small" /><div>本投票最终解释权归aaa所有</div>';
    你想把上面变成什么??
    ....
      

  12.   


    我就在那回调函数里获得到这三个值:test 3 samll 
    不知道我有没有说清楚。
      

  13.   

    你是想在callbackfunc里面获取 包含test、3、samll 三个结果的一个数组么?
    preg_replace_callback用类似循环的方式 每次向回调函数传入当前匹配的一个内容,不会将三个匹配一次传进去
    在这里你可能用错函数了,还是将最终需求给出来吧?