вы можете сделать это следующим образом:
if (preg_match('%(<p[^>]*>.*?</p>)%i', $subject, $regs)) {
$result = $regs[1];
} else {
$result = "";
}
Вы проверяете свою строку на регулярное выражение, если есть совпадение, вы получаете первый и только первый, если их нет. результатом будет пустая строка.
Если вам нужно получить больше, чем первый результат, вы можете перебирать массив $ regs. И вам нужно найти любой другой тег, который изменит регулярный expresión для его обработки, например, чтобы найти теги IMAGE, которые вы используете:
(<img[^>]*>.*?</img>)
EDIT: Если вы обрабатываете строку за строкой (только с тегом вы ищете), вы можете положить ^ ... $ вокруг выражения, чтобы соответствовать полной строке, например:
if (preg_match('%^(<p[^>]*>.*?</p>)$%im', $subject, $regs)) {
$result = $regs[1];
} else {
$result = "";
}
HTH, С уважением.