html中包含如下div,想用正则取得这段div中的内容<div class="text clear" id="contentText" collection="Y">
内容
</div>

解决方案 »

  1.   


    $s =<<<eof
    <div class="text clear" id="contentText" collection="Y">
    内容
    </div>
    eof;
    preg_match('/<div\s+class="text\s+clear"\s+id="contentText"\s+collection="Y">(.*?)<\/div>/is',$s,$arr);
    echo $arr[1];
      

  2.   


    没错,没有限定的,效率会比较低。如果内容多,那不是要把所有DIV的内容全都匹配了?
    那么就得用这个preg_match_all!获取对应ID特征值的匹配!取id值包括2的DIV内容,代码如下:
    <?php
    $s = <<<eof
    <div class="text clear" id="contentText" collection="Y">
    内容
    </div>
    <div class="text clear" id="contentText1" collection="Y">
    内容1
    </div>
    <div class="text clear" id="contentText2" collection="Y">
    内容2
    </div>
    eof;
    //preg_match('/<div\s+class="text\s+clear"\s+id="contentText"\s+collection="Y">(.*?)<\/div>/is',$s,$arr);
    preg_match('/<div[^>]*id[^>]*2[^>]*>(.*?)<\/div>/is',$s,$arr);//特征值为2.这个值也可以是其他任何字符!
    echo $arr[1];//数字2为ID特征值,所以输出内容2
    ?>如果要获取所有的div内容,可以这样:
    <?php
    $s = <<<eof
    <div class="text clear" id="contentText" collection="Y">
    内容
    </div>
    <div class="text clear" id="contentText1" collection="Y">
    内容1
    </div>
    <div class="text clear" id="contentText2" collection="Y">
    内容2
    </div>
    eof;
    //preg_match('/<div\s+class="text\s+clear"\s+id="contentText"\s+collection="Y">(.*?)<\/div>/is',$s,$arr);
    //preg_match('/<div[^>]*id[^>]*2[^>]*>(.*?)<\/div>/is',$s,$arr);
    preg_match_all("/<div[^>]*>(.*?)<\/div>/is",$s,$arr);
    echo print_r($arr[1]);//输出所有div标签的内容!
    ?>
      

  3.   

    为什么非用正则呢? 如果是客户端可以用jquery获取id的内容不就行了. 如果服务器端获取其他网站的.用dom或file_get_contents 获取.
      

  4.   

    不用正则,怎么把file_get_contents获取到的一大丢HTML中有用的东西提取出来呢?
    还有远程HTML文件里的内容也无法直接使用JQUERY来直接获取对象的。所以必须的正则还是少不了的。 事半功倍!