@IvanIF

Как заменить все символы переноса только между тегами?

У меня есть примерно вот такой текст:
$line = "text <p>text \n\n   \n text   \n text </p> text  \n\n \n text";
Как мне заменить все символы переноса строки только между тегами <p> на <br />, чтобы получилось вот так:
$line = "text <p>text <br /><br />   <br /> text   <br /> text </p> text  \n\n \n text";
Я пытался сделать это регулярными выражениями, но ничего не получилось ((( Это вообще делается только средствами регулярок?
  • Вопрос задан
  • 92 просмотра
Решения вопроса 2
@IS-Builder
~ PHP-8 & REGEXP - This is a really powerful kit ~
Если тег параграфа невложенный:
$line = "text <p>text \n\n   \n text   \n text </p> text  \n\n \n text";

$line = preg_replace_callback(
    '~<p>[^<]+</p>~',
    function($m){
        return str_replace("\n", '<br>', $m[0]);
    },
    $line
);

echo $line;
Ответ написан
@dodo512
$line = "text <p>text \n\n   \n text   \n text </p> text  \n\n \n text\n";
$line = preg_replace('#(?:^|</p>).*?(?:\z|<p>)(*SKIP)(*F)|\n#is', '<br />', $line);
echo $line;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы