文件cache.txt内容:<span>a1:</span>efg<span>b1:</span>ijk<span>c1:</span>xyz<br />
<span>a2:</span>efkjkg<span>c2:</span>ijk<br />
<span>a3:</span>wtrrt<span>b3:</span>ijk<br />
<span>c4:</span>ijk<br />
求正则,将里面的8条数据全部提取出来.
我的代码是 $handle=fopen('cache.txt','r');
for($line=fgets($handle);!feof($handle);$line=fgets($handle))
{
  if(preg_match('/<span>([^:]+)\:<\/span>([^<]+)/',$line,$out))
  {
echo(',"'.$out[1].'":"'.$out[2].'"');
  }
}
fclose($handle);只提取到每一行的第一条数据,
求会全局匹配的帮忙给个表达式!

解决方案 »

  1.   

    $s = <<< TEXT
    <span>a1:</span>efg<span>b1:</span>ijk<span>c1:</span>xyz<br />
    <span>a2:</span>efkjkg<span>c2:</span>ijk<br />
    <span>a3:</span>wtrrt<span>b3:</span>ijk<br />
    <span>c4:</span>ijk<br />
    TEXT;preg_match_all('#<(span).*>(.+)</\\1>#isU', $s, $r);
    print_r($r[2]);Array
    (
        [0] => a1:
        [1] => b1:
        [2] => c1:
        [3] => a2:
        [4] => c2:
        [5] => a3:
        [6] => b3:
        [7] => c4:
    )
      

  2.   


    $pattern = "<span>a1:</span>efg<span>b1:</span>ijk<span>c1:</span>xyz<br />";
      if(preg_match_all('/<span>([^:]+)\:<\/span>([^<]+)/',$pattern,$out))
      {
        var_dump($out);
      }
      

  3.   

    要的不是字段编号,而是数据
    -|A-----------------B-----------------C
    1|efg---------------ijk----------------xyz
    2|efkjkg-------------------------------ijk
    3|wtrrt-------------ijk-------------------
    4|-------------------------------------ijk
    而且实际文件可能很大,
    要转JSON.
      

  4.   

    多谢你提供的这个函数,让我看清了preg_match_all返回的数组结构.
    已经完美转换成JSON数据了.
    现给出代码,供来者参考:$line = "<span>a1:</span>efg<span>b1:</span>ijk<span>c1:</span>xyz<br />"; 
    //$line = "<span>a1:</span>efg<br />"; 
    if(preg_match_all('/<span>([^:]+)\:<\/span>([^<]+)/',$line,$out))
    {
    // var_dump($out); 
    $count=count($out[1]);
    echo('{');
        for ($i = 0; $i <$count; $i++) 
        {
    echo(',"'.$out[1][$i].'":"'.$out[2][$i].'"');
        }
    echo('}');

      

  5.   

    原来PHP手册上都有介绍,只能怪自己看得不够仔细.折腾了一下午,教训啊!