/**
*
* @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;
}