Удаление лишних разрывов строк с помощью регулярных выражений - PullRequest
11 голосов
/ 03 мая 2009

Я разрабатываю сайт с одной службой на PHP, который просто отображает сообщения, публикуемые посетителями (в идеале окружающие тему веб-сайта). Любой может опубликовать до трех сообщений в час.

Поскольку на сайте будет только одна страница, я бы хотел контролировать длину каждого сообщения по вертикали. Однако я хочу хотя бы частично сохранить разрывы строк в исходном сообщении. Компромиссом может быть разрешение двух разрывов строк, но если их больше двух, замените их всего двумя разрывами строк подряд. Переполнение стека реализует это.

Например:

"Дикобразы \ Нер \ п \ п \ п \ nporcupiney."

будет изменено на

«Дикобразы


Дикобразы».

Одним из сложных аспектов проверки разрывов строк является возможность их сбора и сохранения в виде \ r \ n, \ r или \ n. Я думал о преобразовании всех разрывов строк в
с помощью nl2br (), но это казалось ненужным.

Мой вопрос: используя регулярные выражения в PHP (с такими функциями, как preg_match () и preg_replace ()), как я могу проверить наличие более двух разрывов строк подряд (с пробелами между ними или без них), а затем изменить их до двух разрывов строк?

Ответы [ 2 ]

32 голосов
/ 03 мая 2009
preg_replace('/(?:(?:\r\n|\r|\n)\s*){2}/s', "\n\n", $text)
6 голосов
/ 03 мая 2009

Что-то вроде

preg_replace('/(\r|\n|\r\n){2,}/', '<br/><br/>', $text);

должно работать, я думаю. Хотя я точно не помню синтаксис PHP, ему может понадобиться еще немного уйти: - /

...