[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярные выражения
Страницы: 1, 2
lop_atin
Возникла проблема, когда пользователь оставляет комментарий на сайте, то нужно учесть перенос строк "\n" — этого я добиваюсь с помощью:

$text = nl2br($text);


Но вот проблема в другом, дело в том, что мне нужно "обрезать" более двух подряд "\n\n\n\n\n\n\n\n....", и заменять их на дав: "\n\n". Чтобы страница комментариев выгладила эстетично, без разрывов в 10+ строк.

Решил сделать с помощью регулярных выражений, интересно: а как-то по другому можно? Проблема в том, что я нечего ранее не делал, и регулярные выражения сам не писал НИКОГДА. Решил сразу не писать Вам, ну а то толку ноль будет, нужно самому учиться, вот нашел статью интересную, обучился понял, что к чему, теперь хоть немного, но понимаю что и как. (Вот, кстати статья: http://phpclub.ru/detail/article/regexp_1, http://phpclub.ru/detail/article/regexp_2). Извиняюсь если нельзя кидать ссылки.

Так вот, после этого написал вот такое выражение:

$text = preg_replace("/\n{2,}/", "\n\n", $text);


Но не помогает, как было over10 строк пустых, так и осталось. Помогите пожалуйста :)
alexbel2404
Может поможет прогнать сначала через trim(), а потом через nl2br? Хотя не уверен, что сработает, всего лишь предположение smile.gif
Invis1ble
должно работать, ищи в другом месте ошибку
и покажи что у тебя в $text на всякий случай

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

lopatin-100
Цитата (Invis1ble @ 5.11.2013 - 00:45)
должно работать, ищи в другом месте ошибку
и покажи что у тебя в $text на всякий случай

я через телефон сижу, сам текст смогу только завтра дать. А пока могу ссылку показать, где я все это тестирую: http://sequin.ru/lolita/index вот там вверху, начиная со слов: а давайте писать....
killer8080
$text = preg_replace('#(\r\n|\r|\n){2}(\r\n|\r|\n)+#', '$1', $text);
lop_atin
Цитата (killer8080 @ 5.11.2013 - 02:24)
$text = preg_replace('#(\r\n|\r|\n){2}(\r\n|\r|\n)+#', '', $text);

не, твой способ не работает.

А вот что работает:

$text = preg_replace("/\n\s{16,}/", "\n\n", $text);


То есть, я просто увеличил число (16 взято с потолка, если поставлю 10,11.., то тоже работать будет).

Может мне кто-то объяснить почему так?!
killer8080
Цитата (lop_atin @ 5.11.2013 - 16:39)
Цитата (killer8080 @ 5.11.2013 - 02:24)
$text = preg_replace('#(\r\n|\r|\n){2}(\r\n|\r|\n)+#', '', $text); 
не, твой способ не работает.

ну если ты его использовал так, как в цитате, то да laugh.gif
lop_atin
Цитата (killer8080 @ 5.11.2013 - 02:24)
$text = preg_replace('#(\r\n|\r|\n){2}(\r\n|\r|\n)+#', '', $text);

Не, не так. Вот так пробовал:

$text = preg_replace('#(\r\n|\r|\n){2}(\r\n|\r|\n)+#', '\n\n', $text);
killer8080
Цитата (lop_atin @ 5.11.2013 - 17:06)
Не, не так. Вот так пробовал:

$text = preg_replace('#(\r\n|\r|\n){2}(\r\n|\r|\n)+#', '\n\n', $text)

а просто вставить код как есть, и проверить религия не позволяет? Прежде чем говорить, что он не работает laugh.gif
lop_atin
Цитата (killer8080 @ 5.11.2013 - 18:09)
Цитата (lop_atin @ 5.11.2013 - 17:06)
Не, не так. Вот так пробовал:

$text = preg_replace('#(\r\n|\r|\n){2}(\r\n|\r|\n)+#', '\n\n', $text)

а просто вставить код как есть, и проверить религия не позволяет? Прежде чем говорить, что он не работает :lol:

Я вставлял:

$text = preg_replace('#(\r\n|\r|\n){2}(\r\n|\r|\n)+#', '$1', $text);


Нечего не происходит, подумал, что нужно изменить $1 на \n. Тоже нечего...
killer8080
да ладно, еще скажи что так не работает
$text = "aa 



ff"
;
echo nl2br(preg_replace('#(\r\n|\r|\n){2}(\r\n|\r|\n)+#', '$1', $text));
lop_atin
Мне интересно почему в таком тексте:


давай
писать

каждое
слово





на

новой
строчке?"

Вот такой код работает:

$text = preg_replace("/\n\s{10,}/", "\n\n", $text);
killer8080
Цитата (lop_atin @ 5.11.2013 - 17:18)
Вот такой код работает:

а ничего что \s это любой пробельный символ, а не только перевод строки? не смущает? biggrin.gif
lop_atin
Цитата (killer8080 @ 5.11.2013 - 18:23)
Цитата (lop_atin @ 5.11.2013 - 17:18)
Вот такой код работает:

а ничего что \s это любой пробельный символ, а не только перевод строки? не смущает? :D

Твой код действительно сработал:

echo nl2br(preg_replace('#(\r\n|\r|\n){2}(\r\n|\r|\n)+#', '$1', $text)); 


теперь тот текст выводиться вот так:

aa
ff


но как мне теперь седлать между ними 1 строку пустую?
bposter
css line-height: 180%;




_____________
Вязание xe4.ru спицами.
Сайт для тестов (подопытный №543)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.