Правильная замена переноса строк на параграфы

croose

Новичок
Правильная замена переноса строк на параграфы

Здравствуйте.

Долго мучаюсь и не могу найти решение для задачи.
Есть текст

Код:
Сел Иван на коня и поскакал

Сел Иван на коня и поскакал

Сел Иван на коня и поскакал

Сел Иван на коня и поскакал
Очень нужно, чтобы каждая строка заносилась в <p>Сел Иван на коня и поскакал</p>.
Пробовал эксперементировать с preg_replace, но толком ничего не выходит.

Код:
$str="\r\n\r\n".$str;
$str=preg_replace("/((\r?\n){2,})([^\r\n]{2,})/U","<p>$3",$str);
$str=preg_replace("/((\r?\n){2,})<p>/U","</p>\n\n<p>",$str);
$str=preg_replace("/^\s*<\/p>/","",$str);
$str=$str."</p>";
Помогите пожалуйста грамотно решить такую задачу.
 

nalim

Новичок
начал решать правильно)
можно в 1 строку заменить
не забывай про ^ и $

мучайся!
станешь гениальным программистом как мы)
 

Beavis

Banned
регулярки тут, по-моему, лишние... обычных строковых операций хватит
 

ustas

Элекомист №1
http://phpclub.ru/detail/article/regexp_2
начинай читать с "Когда и почему не следует использовать регулярные выражения"

nalim не забывай про ^ и $
такие советы оставь при себе, это не проверка мыла
 

WP

^_^
Ты молодец что стал глубоко экспериментировать. Но задачка легко решается многострочным режимом.
PHP:
$str = 'Сел Иван на коня и поскакал

Сел Иван на коня и поскакал

Сел Иван на коня и поскакал

Сел Иван на коня и поскакал';
echo preg_replace('~^(?![\r\n])(.*?)\r?\n?$~m','<p>$1</p>',$str);
-~{}~ 15.09.07 10:48:

По поводу целесообразности регулярок:
Думаю регуляркой это сделать проще, но алгоритм действительно простой.
PHP:
$str = 'Сел Иван на коня и поскакал

Сел Иван на коня и поскакал

Сел Иван на коня и поскакал

Сел Иван на коня и поскакал';
for ($result = '',$i = 0,$a = explode("\r\n",$str),$s = sizeof($a); $i < $s && ($result .= (!strlen($a[$i])?$a[$i]:'<p>'.$a[$i].'</p>')."\n") !== FALSE; ++$i);
echo $result;
explode можно заменить split'ом для поддержки всех вариантов перевода строки :)
Замерь скорость если интересно.
 

Фанат

oncle terrible
Команда форума
WP
может, ты и пойдешь тогда на форум для sapienti?
а мы, грешные, уж как-нибудь тут будем традиционными методами
 

WP

^_^
*****
Просто ради интереса засунул в один усеченный for, можно разложить на много строк, но суть от этого не изменится. Имхо (субъективно) код понятен человеку мало-мальски знающему php. И я не зря заговорил о скорости)
 

Фанат

oncle terrible
Команда форума
можно, я не буду вступать с тобой в дискуссии? спасибо.
в будущем постарайся воздержаться от говнооформления кода на этом форуме.
 

FreeSpace

Чукча-читатель
Может я переработал, но зачем такие сложности?
За базу достаточно взять вот это:
PHP:
$output = '<p>'.str_replace("\r\n", '</p><p>', $input).'</p>';
И по желанию - доработать напильником :)
 
Сверху