Хотя регулярные выражения не являются лучшим решением для такой работы, этот код работает для приведенного вами примера (он может быть неоптимальным!)
<php>
$text = '<p>text1</p>
<p>text2</p>
text3
<p>text4</p>
<p>text5</p>';
$regex = '|(([\r\n ]*<p>[a-zA-Z0-9 \r\n]+</p>[\r\n ]*)+)([\r\n ]*[a-zA-Z0-9 ]+)(([\r\n ]*<p>[a-zA-Z0-9 \r\n]+</p>[\r\n ]*)+)|i';
$replacement = '${1}<p>${3}</p>${4}';
$replacedText = preg_replace($regex, $replacement, $text);
echo $replacedText;
</php>
в строке замены, смотрите, что вы используетесоответствуйте 1, 3 и 4, чтобы получить правильные подспички!Если вы хотите иметь возможность захватывать другие теги HTML, тогда
, вы можете использовать это регулярное выражение:
$regex = '|(([\r\n ]*<[a-z0-6]+>[a-zA-Z0-9 \r\n]+</[a-z0-6]+>[\r\n ]*)+)([\r\n ]*[a-zA-Z0-9 ]+)(([\r\n ]*<[a-z0-6]+>[a-zA-Z0-9 \r\n]+</[a-z0-6]+>[\r\n ]*)+)|i';
, но имейте в виду, что это может испортить вещи, потому что закрывающий тег может соответствовать чему-то другому.