Удаление избыточных разрывов строк с помощью регулярных выражений


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

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

Например:

"Дикобразы\наре\н\н\н\ппоркупиней".

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

"Дикобразы
являются

дикобразами".

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

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

Author: chaos, 2009-05-03

2 answers

preg_replace('/(?:(?:\r\n|\r|\n)\s*){2}/s', "\n\n", $text)
 32
Author: chaos, 2009-05-03 02:11:04

Что-то вроде

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

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

 6
Author: David Z, 2009-05-03 02:07:17