怪我说得不够清楚:我的意思是,有一个HTML字符串(随机),我现在知道了在这个字符串中的一个表格(TABLE)中的包含的内容,我如何写出Regular Expression,来取得该内容所属最内层的TABLE的HTML代码?例如:
<table ...>
<tr><td>
<table ...><tr><td>程序员大本营</td></tr></table>
</td></tr>
</table>如果我只知道“程序员大本营”,现在想取得包含它的最内层的表格HTML代码,如何写Regular Expression(规则表达式)?谢谢了。

解决方案 »

  1.   

    replace <..>  with "":$newstr = ereg_replace($str,"<[^>]+>","");
      

  2.   

    <?
    $string = "adsf<table ...> 
    <tr><td>
    <table ...><tr><td>程序员大本营
    </td></tr></table>
    </td></tr>
    </table>adsf";
    $string=preg_replace("/.*?(<table.*程序员大本营.*<\/table>).*?/Uis","\\1",$string);
    echo "<xmp>".$string;
    ?>
      

  3.   

    vivanboy兄,感谢您的答复。对于以下的字符串,您的规则表达式运行起来有点问题:adsf<table ...> 
    <tr><td>
    <table ...>
    <tr><td>程序员大本营</td></tr>
    <tr><td><table><tr><td>adsf</td></tr></table></td></tr>
    </table>
    </td></tr>
    </table>返回值如下:
    <table ...><tr><td>程序员大本营
    </td></tr><tr><td><table><tr><td>adsf</td></tr></table>应该返回值:
    <table ...>
    <tr><td>程序员大本营</td></tr>
    <tr><td><table><tr><td>adsf</td></tr></table></td></tr>
    </table>真的麻烦诸位了。
      

  4.   

    <?
    $string="adsf<table ...> 
    <tr><td>
    <table ...>
    <tr><td>程序员大本营</td></tr>
    <tr><td><table><tr><td>adsf</td></tr></table></td></tr>
    </table>
    </td></tr>
    </table>";
    function lastPos($str,$son,$p=0){
    while(($m=strpos($str,$son,$p))!==false)
    $p=$m+1;
    return ($p>=1)?$p-1:false;
    }
    $pos=strpos($string,"程序员大本营");
    $str1=substr($string,0,$pos);
    $str2=substr($string,$pos);
    while(($p=lastPos($str1,"<table"))<(lastPos($str1,"</table>"))){
    $str1=substr($str1,0,$p);
    }
    while(1){
    $pos1=strpos($str2,"<table",$q);
    $pos2=strpos($str2,"</table>",$q);
    if(!$pos1&&$pos2){break;}
    else $q=$pos2+8;
    }
    echo "<xmp>".substr($string,$p,$pos-$p).substr($str2,0,$pos2+8);
    ?>
      

  5.   

    i think it is very tough to achieve what you want with regular expressions, try using a html parser:
    http://www.jazarsoft.com/php/view.php3?id=2
      

  6.   

    <?
    $str="adsf<table ...>\n<tr><td>\n<table>....</table><table ...><tr><td>程序员大本营</td></tr></table>....<table><tr><td>adsf</td></tr></table></td></tr></table></td></tr></table>";
    preg_match("/.*(<table.*?程序员大本营.*?<\/table>)/isx",$str,$nn);
    echo $nn[1];
    ?>