Intereting Posts
Как найти следующий числовой индекс существующего массива? Отправленные сервером события Опрос, вызывающий длительные задержки Редактировать файл php.ini фильтрация с использованием регулярного выражения и возврат совпадающего числа Какие системные файлы должны находиться в закрытой среде для правильной работы php-fpm на ubuntu? Подключение к удаленному серверу MySQL с помощью PHP Удаление index.php из URL-адреса CodeIgniter перенаправляет на localhost Как отменить отправку на AjaxForm Как самостоятельно использовать один компонент Zend Framework, такой как XML-RPC или REST? Проверка загрузки файлов в Codeigniter Кто должен обрабатывать условия в сложных запросах, карту данных или уровне обслуживания? Почему debug_backtrace () иногда не включает номер строки? Будет ли глобальное ключевое слово устаревать / удаляться в будущих версиях PHP? Изменение цены товара на основе данных пользовательской корзины в WooCommerce Класс инъекции зависимостей – где хранить конфиги

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

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

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

Например:

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

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

<br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br />.

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

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

preg_replace('/(?:(?:\r\n|\r|\n)\s*){2}/s', "\n\n", $text) 

Что-то вроде

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

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