<p></p> etiketleri arasını almakla uğraşmaktansa. İlk p etiketinden önceki ve sonraki ilk id, class veya name özelliği olan etiketleri belirtin. Sonra arasındaki bütün p'leri alırsınız. Şunun gibi:
$html = '
<div>
<div id="asd">!-- her sayfada farklı olan bi yazı --</div>
<div>!-- her sayfada farklı olan bi yazı --</div>
<p>qqq</p>
<p>qqq</p>
</div>
<input name="qqq" />';
preg_match('~id\="asd">([^<]*)<\/div>\s*<div>([^<]*)<\/div>\s*(.*)\s*<\/div>\s*<input name\="qqq" \/>~si', $html, $match);
$ps = $match[3];
echo $ps;