php纯正则很难实现这样复杂的匹配,必须做些逻辑处理,一下是正则加逻辑处理:
$s = <<
aaa
contents
html;
$pattern = "/(".
"]*?)+\s*>|".
"\s]+))?)*\s*\/?>|".
"|".
"".
")/";
preg_match_all($pattern, $s, $aMatches, PREG_OFFSET_CAPTURE);
function getNested($strHTML, $str, $arr) {
$i=0;
$j=0;
$h=0;
$arrStr = array();
$arrBak = $arr;
$arrNested1 = array();
$arrNested2 = array();
foreach($arr as $k=>$v) {
if(trim($v[0]) == $str) {
$arrStr[0] = $v[0];
$arrStr[1] = $v[1];
$arrStr[2] = $k;
}
}
for($i=$arrStr[2]; $i
if (preg_match('/
$j++;
$arrNested1[$j][] = $arrBak[$i];
}
if (preg_match('//', $arrBak[$i][0])) {
$h++;
$arrNested2[$h][] = $arrBak[$i];
}
}
return substr($strHTML, strlen($str), $arrNested2[$j][0][1]-$arrStr[1]-strlen($str));
}
echo getNested($s, '