Я хочу заменить несколько символов 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);