/** * * @param string $str * @param string $start 完整起始标签 <标签名 class="xxxxx"> * @return array || false * @example jqHtmlDbq(string $str,string $start); * 截取对标签$start 标签名 例:<标签名 class="xxxxx"> <p id="xxxxx"> 标签开始的标志, * 返回数组 匹配到的所有标对标签,不是唯一起始标签时,可能有多个 =========demo============= $str='<div class="2"><h2>key</h2><div class="title">title2</div>'; $start='<h2>'; $str_arr = jqHtmlDbq($str,$start); if($str_arr && count($str_arr)){ print_r($str_arr); }else{ echo '截取失败'; } =========================== * **/ function jqHtmlDbq(string $str,string $start){ if(preg_match('/^<[A-Za-z]+\d*/',$start,$match)){ $end = str_replace('<','<\/',$match[0]).'>'; }else{ echo '截取对标签起始标签有误!'; exit; } //剔除独立标签 foreach(array('input','hr','br','img') as $tag){ $reg='/<'.$tag.'.*?>/isx'; if(preg_match_all($reg,$str,$matchs)){ foreach($matchs[0] as $match){ $str_tmp=str_replace('<','====+====',$match); $str_tmp=str_replace('>','====-====',$str_tmp); $str = str_replace($match,$str_tmp,$str); } } } //正则匹配对标签 $reg = '/'.$start.'(([^<]*<[^<>]*>[^<]*<\/[^><]*>[^<]*)*|[^<>]*)'.$end.'/Uis';//暂测靠谱 if(preg_match_all($reg,$str,$matchs)){ $re =array(); foreach($matchs[0] as $match){ //还原独立标签 $match = str_replace('====+====','<',$match); $re[] = str_replace('====-====','>',$match); } return $re; } return false; }