function steal($from,$start,$end,$lt,$gt){
$str = explode($start,$from); $str = explode($end,$str[1]); $strs = $str[0];
if($lt){ $strs = $start.$strs; } if($gt){ $strs = $strs.$end; }
return($strs);
}
下面是用法,语法都看的懂,但读不通
function sidenav($s){
global $ebk,$from;
$str = ''; $file = './c_sidenav.txt';
if(!file_exists($file) || date('i') == '59'){
$sidenav = @file_get_contents($from.'/index.html');
$filewrite = fopen($file,'w'); 
if($filewrite){ fwrite($filewrite, $sidenav); }
fclose($filewrite);
}
$sidenav = @fread(@fopen($file,'r'),@filesize($file));
if($s == '0'){
$str = $ebk->steal($sidenav,'新到小说','</div><!--end-->',false,false);
}else if($s == '1'){
$str = $ebk->steal($sidenav,'书友推荐','</div><!--end-->',false,false);
}
$str = $ebk->steal($str,'<div class="leikuangbottom">','</div>',false,false);
$str = preg_replace('/·《<a href="(.*)\/articleinfo.php\?id=([0-9]+)" target="_blank">(.+?)<\/a>》<br \/>/','<ul>&#8226; <a href="./read.php?bid=\\2">\\3</a></il>',$str);
return($str);
}
?>

解决方案 »

  1.   

    函数的功能是将标签里面的书名提取出来吧,第一次explode把标签左边的内容去掉(通过取str[1]),同理将标签右边的内容去掉,根据$lt和$rt判断是否返回标签本身
    下面的正则表达式有问题,preg_replace第二个参数中的\\2和\\3应该换为\\1和\\2
    初学php,说错的地方请指正
      

  2.   

    应该是\\2和\\3,在php正则表达式中\\0表示完整匹配,自动命名的子模式从1开始
      

  3.   

    做抓取的函数。
    $start,$end两个变量是要截取的字符串范围。这两个变量会作为正则表达式的规则,去匹配出相应的内容。