本帖最后由 exc_f 于 2010-09-24 01:07:34 编辑

解决方案 »

  1.   

    $mode  =  '#<li>(.*?)</li>#';
    preg_match_all($mode,$data,$arr);
    print_r($arr);
      

  2.   

    没错呀,$arr[1]就是你要的那个数组如果li的起始标记和结束标记可能不在一行的话,只要$mode = '#<li>((.|\n)*?)</li>#';就可以了
      

  3.   

    我要的是 $arr[1] =>  PHP   5.3.0   RC1   正式发布 [2] =>PHP     v5.2.9   RC3已经释出...以此类推...
      

  4.   

    $mode = '#<li>.+?<a.+?>(<span>)?(.*?)</#';
    preg_match_all($mode,$data,$arr);
    print_r($arr[2]);
    应该好使  你试一试吧  哪位高手还有更好 更简单的写法  拿出来 我感觉这个我写的恶心啦一点
      

  5.   

    根据楼主的需求,可能多一步取出标签要方便些,比如有些li里面还有span,但有些没有。$puredate1 = preg_replace("#<(?!/li)[^>]+>#","",$data);//去掉li标签开头以及其他标签,剩下的</li>做分隔符
    $arr1 = preg_split("@</li>@",$puredate1);
    print_r($arr1);//结果回多出最后1个空,可以这里处理也可以在前面多1步抹去最后1个</li>$puredate2 = preg_replace("#<(?!/?li)[^>]+>#","",$data);//保留<li>标签对作为匹配标志,去掉其他标签
    preg_match_all("#<li>([^>]+)</li>#",$puredate2,$arr2);
    print_r($arr2[1]);两种方式,看你喜好