<?php
$html=<<<EOD
<div class='container clickable' data-param='{"footer"<div>Bye</div>","info":"We win"}'>
<img src='a.jpg' />
</div>
<a href='a.html'>The A</a>
<span></span>
<span data-span-param='{"detailTag":"<span class=\"link\">Anything here</span>"}'>
<a></a>
</span>
<span data-param-tag='<p>How are you</p>'>Thanks</span><div data-tag="%[[[[[[[[[<span class='link'>It is difficult now</span>]]]]]]]]]%">wow</div>
<div id="<div class="<span id="<span id="aa" data-role="then">How</span>" data-param="<span id="finish">we</span>">Thanks</span>">Whence</div>">
Finaly so even though you have <> or < > they won't be captured except html tags unquoted by double or single quote.
</div>
EOD;
if(preg_match_all('~(?!<\s*>)\<(?:(?>[^<>]+)|(?R))*\>~',$html,$matchall,PREG_SET_ORDER
)){ foreach($matchall as $m){
$tags[] = $m[0];
}
}
PD9waHAKCiRodG1sPTw8PEVPRAo8ZGl2IGNsYXNzPSdjb250YWluZXIgY2xpY2thYmxlJyBkYXRhLXBhcmFtPSd7ImZvb3RlciI8ZGl2PkJ5ZTwvZGl2PiIsImluZm8iOiJXZSB3aW4ifSc+CjxpbWcgc3JjPSdhLmpwZycgLz4KPC9kaXY+CjxhIGhyZWY9J2EuaHRtbCc+VGhlIEE8L2E+CjxzcGFuPjwvc3Bhbj4KPHNwYW4gZGF0YS1zcGFuLXBhcmFtPSd7ImRldGFpbFRhZyI6IjxzcGFuIGNsYXNzPVwibGlua1wiPkFueXRoaW5nIGhlcmU8L3NwYW4+In0nPgo8YT48L2E+Cjwvc3Bhbj4KPHNwYW4gZGF0YS1wYXJhbS10YWc9JzxwPkhvdyBhcmUgeW91PC9wPic+VGhhbmtzPC9zcGFuPjxkaXYgZGF0YS10YWc9IiVbW1tbW1tbW1s8c3BhbiBjbGFzcz0nbGluayc+SXQgaXMgZGlmZmljdWx0IG5vdzwvc3Bhbj5dXV1dXV1dXV0lIj53b3c8L2Rpdj4KPGRpdiBpZD0iPGRpdiBjbGFzcz0iPHNwYW4gaWQ9IjxzcGFuIGlkPSJhYSIgZGF0YS1yb2xlPSJ0aGVuIj5Ib3c8L3NwYW4+IiBkYXRhLXBhcmFtPSI8c3BhbiBpZD0iZmluaXNoIj53ZTwvc3Bhbj4iPlRoYW5rczwvc3Bhbj4iPldoZW5jZTwvZGl2PiI+CkZpbmFseSBzbyBldmVuIHRob3VnaCB5b3UgaGF2ZSA8PiBvciA8ID4gdGhleSB3b24ndCBiZSBjYXB0dXJlZCBleGNlcHQgaHRtbCB0YWdzIHVucXVvdGVkIGJ5IGRvdWJsZSBvciBzaW5nbGUgcXVvdGUuCjwvZGl2PgpFT0Q7CgokdGFncyA9IGFycmF5KCk7CmlmKHByZWdfbWF0Y2hfYWxsKCd+KD8hPFxzKj4pXDwoPzooPz5bXjw+XSspfCg/UikpKlw+ficsJGh0bWwsJG1hdGNoYWxsLFBSRUdfU0VUX09SREVSKSl7CiAgIGZvcmVhY2goJG1hdGNoYWxsIGFzICRtKXsKICAgICAgICR0YWdzW10gPSAkbVswXTsKICAgfQp9ICAKcHJpbnRfcigkdGFncyk7