function jqHtmlDbq($str,$start){ //得到标签位置
$wzs=strpos($str,$start);
//取到最后;
$_str = substr($str,$wzs);
//得到前标签<div和结束标签
$reg='/<[^\s]+/i';
if(preg_match($reg,$start,$match)){
$strat_tag=rtrim($match[0],'>');
$end_tag=str_replace('<','</',$strat_tag).'>';
}else{
echo logs('起始标签不正确');
return null;
}
//求出内嵌多少个相同标签
$reg='/'.$start.'(.*)?'.str_replace('/','\/',$end_tag).'/Usi';
if(preg_match($reg,$_str,$match)){
$str_tmp=$match[0];
}else{
echo logs('没有找到结束标签');
return null;
}
$tag_counts = substr_count($str_tmp,$strat_tag);
//得到第对应标签的位置
$end_wz = $this->str_n_pos($_str,$end_tag,$tag_counts);
//截取对标签之间内容
$_str=substr($_str,0,$end_wz+strlen($end_tag));
return $_str;
}
//返回字符串第n次出现的位置
function str_n_pos($str,$find,$n){
$pos_val=0;
for ($i=1;$i<=$n;$i++){
$pos = strpos($str,$find);
$str = substr($str,$pos+1);
$pos_val=$pos+$pos_val+1;
}
return $pos_val-1;
}
正则始终都不完美。处理字符串比较靠谱。。