Удалить новые строки из строки и заменить их одним пустым пробелом - PullRequest
258 голосов
/ 21 сентября 2010
$string = "
put returns between paragraphs

for linebreak add 2 spaces at end

";

Хотите удалить все новые строки из строки.

У меня есть это регулярное выражение, оно может перехватить их все, проблема в том, что я не знаю, с какой функцией мне его использовать.

/\r\n|\r|\n/

$string должно стать:

$string = "put returns between paragraphs for linebreak add 2 spaces at end ";

Ответы [ 19 ]

521 голосов
/ 21 сентября 2010

Вы должны быть осторожны с двойными переносами строк, которые могут привести к двойным пробелам.Используйте это действительно эффективное регулярное выражение:

$string = trim(preg_replace('/\s\s+/', ' ', $string));

Несколько пробелов и символов новой строки заменяются одним пробелом.

Редактировать: Как отмечали другие, это решение имеетвыдает совпадения между строками между словами.Этого нет в примере, но можно легко увидеть, как эта ситуация может возникнуть.Альтернатива заключается в следующем:

$string = trim(preg_replace('/\s+/', ' ', $string));
168 голосов
/ 22 сентября 2010

Несколько комментариев по поводу принятого ответа:

+ означает «1 или более».Я не думаю, что вам нужно повторять \s.Я думаю, что вы можете просто написать '/\s+/'.

Также, если вы хотите удалить первые и последние пробелы в строке, добавьте trim.

С этими модификациями код будет:

$string = preg_replace('/\s+/', ' ', trim($string));
69 голосов
/ 21 сентября 2010

Просто используйте preg_replace()

$string = preg_replace('~[\r\n]+~', '', $string);

Вы можете обойтись без str_replace() на этом, хотя код не выглядит чистым:

$string = str_replace(array("\n", "\r"), '', $string);

Посмотреть в прямом эфире на ideone

20 голосов
/ 21 сентября 2010
$string = str_replace(array("\n", "\r"), ' ', $string);
11 голосов
/ 21 сентября 2010

Вы должны использовать str_replace для его скорости и использования двойных кавычек с массивом

str_replace(array("\r\n","\r"),"",$string);
6 голосов
/ 21 сентября 2010

Замена регулярных выражений PCRE может быть выполнена с использованием preg_replace: http://php.net/manual/en/function.preg-replace.php

$new_string = preg_replace("/\r\n|\r|\n/", ' ', $old_string);

Заменяет новую строку или возвращает символы пробеломЕсли вы не хотите ничего заменять, измените второй аргумент на ''.

5 голосов
/ 21 сентября 2010

Используйте это:

заменить серию строк новой строкой:

$string = preg_replace("/[\\n\\r]+/", "", $string);

или вы, вероятно, хотите заменить символы новой строки одним пробелом:

$string = preg_replace("/[\\n\\r]+/", " ", $string);
4 голосов
/ 16 ноября 2014

Escape-последовательность \R соответствует общему переводу строки

то есть все, что считается последовательностью разрыва строки по Unicode. Это включает в себя все символы, соответствующие \v ( вертикальный пробел ) и многосимвольную последовательность \x0D\x0A ...

$string = preg_replace('/\R+/', " ", $string);

В 8-битном режиме без UTF-8 \R эквивалентно следующему: (?>\r\n|\n|\x0b|\f|\r|\x85) ... pcre.org

Regex101 Demo

3 голосов
/ 08 июня 2016

А как насчет:

$string = trim( str_replace( PHP_EOL, ' ', $string ) );

Это должно быть довольно надежное решение, потому что \ n не работает корректно во всех системах, если я не ошибаюсь ...

3 голосов
/ 02 августа 2018

Разрывы строк в тексте обычно представлены как:

\ r \ n - на компьютере с ОС Windows

\ r - на компьютереКомпьютер Apple

\ n - в Linux

//Removes all 3 types of line breaks

$string = str_replace("\r", "", $string);

$string = str_replace("\n", "", $string);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...