Заменить множественную новую строку, вкладку, пробел

Я хочу заменить несколько символов Newline одним символом Newline, несколькими пробелами с одним пробелом.
Я попробовал preg_replace("/\n\n+/", "\n", $text); и не удалось!

Я также выполняю эту работу в $ text для форматирования.

 $text = wordwrap($text,120, '<br/>', true); $text = nl2br($text); 

$ text – это большой текст, взятый от пользователя для BLOG, и для лучшего форматирования я использую wordwrap.

Теоретически, ваш обычный экспресс работает, но проблема в том, что не вся операционная система и браузеры отправляют только \ n в конце строки. Многие также отправят \ r.

Пытаться:

Изменить: я упростил это:

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

Изменить: И для решения проблемы с некоторой отправкой \ r:

 preg_replace("/[\r\n]{2,}/", "\n\n", $text); 

Обновление 1: на основе вашего обновления:

 // Replace multiple (one ore more) line breaks with a single one. $text = preg_replace("/[\r\n]+/", "\n", $text); $text = wordwrap($text,120, '<br/>', true); $text = nl2br($text); 

use \ R (который представляет любую последовательность окончания строки):

 $str = preg_replace('#\R+#', '</p><p>', $str); 

найдено здесь: http://forums.phpfreaks.com/topic/169162-solved-replacing-two-new-lines-with-paragraph-tags/

Документация PHP о последовательностях Escape :

\ R (разрыв строки: соответствует \ n, \ r и \ r \ n)

Это ответ, поскольку я понимаю вопрос:

 // normalize newlines preg_replace('/(\r\n|\r|\n)+/', "\n", $text); // replace whitespace characters with a single space preg_replace('/\s+/', ' ', $text); 

редактировать

Это фактическая функция, которую я использую для преобразования новых строк в разделитель строк HTML и элементов абзаца:

 /** * * @param string $string * @return string */ function nl2html($text) { return '<p>' . preg_replace(array('/(\r\n\r\n|\r\r|\n\n)(\s+)?/', '/\r\n|\r|\n/'), array('</p><p>', '<br/>'), $text) . '</p>'; } 

Вам понадобится многострочный модификатор для соответствия нескольким строкам:

 preg_replace("/PATTERN/m", "REPLACE", $text); 

Кроме того, в вашем примере вы, кажется, заменяете 2 + новые строки ровно 2, что не соответствует вашему вопросу.

Я бы предложил что-то вроде этого:

 preg_replace("/(\r\n|\n|\r){2,}/", "$1", $str); 

Это позаботится обо всех ОС, которые используют \n или \r или \r\n качестве символа конца строки. Он заменит 2 или более экземпляров этих символов EOL, используя backreference # 1, что означает, что EOL для платформы будет заменой вместо \n которая может быть ошибочной на некоторых платформах.

Я пробовал все выше, но это не сработало для меня. Затем я создал длинный путь для решения этой проблемы …

До :

 echo nl2br($text); 

После :

 $tempData = nl2br($text); $tempData = explode("<br />",$tempData); foreach ($tempData as $val) { if(trim($val) != '') { echo $val."<br />"; } } 

И это сработало для меня .. Я написал здесь, потому что, если кто-то пришел сюда, чтобы найти ответ, как я.

Если вы просто хотите заменить несколько вкладок одной вкладкой, используйте следующий код.

 preg_replace("/\s{2,}/", "\t", $string); 

Попробуй это:

 preg_replace("/[\r\n]*/", "\r\n", $text); 

Замените голову и конец строки или документа!

 preg_replace('/(^[^a-zA-Z]+)|([^a-zA-Z]+$)/','',$match);