我要采集一个网站,必须一个正则能抓去里面的指定数据preg_match('/<title>(.*?)<\/title>.*?(<div class="test">(.*?)<\/div>){3,5}/is',$html, $mtach);<div class="test">(.*?)<\/div> 这样的div里面有几个,数目不一定,但是也不能用preg_match_all,因为还有其他的数据要抓。我想知道 <div class="test">(.*?)<\/div>{3,5} 这样的有法子能用吗(php){3,5}我知道可行但是里面还有(.*?),而且还不是贪婪匹配,我测试了,匹配不到,但<div class="test">(.*?)<\/div>{1}就能匹配到一次各位高手。

解决方案 »

  1.   

    (?:<div class="test">(.*?)<\/div>){3,5}
      

  2.   

    我这是打个比方,理想是这样
    preg_match('/<title>(.*?)<\/title>.*?(<div class="test">(.*?)<\/div>){3,5}/is',$html, $mtach);(<div class="test">(.*?)<\/div>){3,5} 和 (?:<div class="test">(.*?)<\/div>){3,5} 我测试了,匹配不到<div class="test">(.*?)<\/div>要匹配的次数不是一定的
      

  3.   

    正则需要自己变通,根据具体批评的字符串是不是这样呢?$str =<<<DOC
    <div class="test">1</div>
    <div class="test">2</div>
    <div class="test">3</div>
    <div class="test">4</div>
    <div class="test">5</div>
    <div class="test">6</div>
    DOC;
    preg_match('/(?:<div class="test">(.*?)<\/div>\s*){3,5}/s', $str, $m);
    echo $m[0];结果
    <div class="test">1</div>
    <div class="test">2</div>
    <div class="test">3</div>
    <div class="test">4</div>
    <div class="test">5</div>
      

  4.   


    但是实际上$m[0]不是要取得的结果啊,
    要求是这样的
    $m[1] => <div class="test">1</div>
    $m[2] => <div class="test">2</div>
    $m[3] => <div class="test">3</div>
    $m[4] => <div class="test">4</div>
    $m[5] => <div class="test">5</div>
      

  5.   


    preg_match('/(?:<div class="test">(.*?)<\/div>\s*){3,5}/s', $str, $m);要求结果是这样哦,呵呵
    要求是这样的
    $m[1] => 1
    $m[2] => 2
    $m[3] => 3
    $m[4] => 4
    $m[5] => 5目前的结果是$m只有$m[0]和 $m[1] => 5