Как найти <
за тегами не следуют ?
$htmlStr = " ba <div>b <? </div>n";
$regex1 = '#<#'; // finds 3 '<'
$regex2 = '#<(?!?)#'; // does not find anyhting, although should find two '<' not followed by '?'
?
является специальным символом в вашем шаблоне регулярных выражений и должен быть экранирован:
$htmlStr = " ba <div>b <? </div>n";
$regex2 = '#<(?!\?)#'; // <-- will find 2 matches
Других решений пока нет …