Удалить новые строки из строки и заменить их одним пустым пробелом

$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 ";

Ответ 1

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

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

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

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

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

Ответ 2

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

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

Кроме того, если вы хотите удалить пробелы сначала и последним в строке, добавьте trim.

С этими изменениями код будет выглядеть следующим образом:

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

Ответ 3

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

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

Вы можете уйти с str_replace() на этом, хотя код выглядит не так просто:

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

Смотрите на live ideone

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

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

замените строку строк новой строки пустой строкой:

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

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

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

Ответ 8

Последовательность побега \R соответствует общей строке новой строки

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

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

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

Демо-версия Regex101

Ответ 9

Что о:

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

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

Ответ 10

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

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

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

\n - в Linux

//Removes all 3 types of line breaks

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

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

Ответ 11

это шаблон, который я использовал бы

$string = preg_replace('@[\s]{2,}@',' ',$string);

Ответ 12

Я не уверен, имеет ли это значение против уже представленных ответов, но я могу просто опубликовать его.

// Create an array with the values you want to replace
$searches = array("\r", "\n", "\r\n");

// Replace the line breaks with a space
str_replace($searches, "", $string);

// Replace multiple spaces with one
$output = preg_replace('!\s+!', ' ', $string);

Ответ 13

возможно, это работает:

$str='\n';
echo str_replace('\n','',$str);

Ответ 14

Это также удаляет вкладки

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

Ответ 15

Вы можете попробовать под кодом сохранить в тексте любые пробелы и новые строки.

$str = "
put returns between paragraphs

for linebreak add 2 spaces at end

";

echo preg_replace( "/\r|\n/", "", $str );

Ответ 16

Я был удивлен, увидев, как мало кто знает о регулярном выражении.

Сброс новых строк в php

$str = preg_replace('/\r?\n$/', ' ', $str);

В perl

$str =~ s/\r?\n$/ /g;

Значение замены любого символа новой строки в конце строки (для эффективности) - необязательно предшествует возврат каретки - с пробелом.

\n или \015 - новая строка. \ r или \012 - возврат каретки. ? в regex означает совпадение 1 или ноль предыдущего символа. $ в регулярном выражении означает конец конца строки.

Оригинальная и лучшая ссылка regex - perldoc perlre, каждый кодер должен хорошо знать этот документ: http://perldoc.perl.org/perlre.html Обратите внимание, что не все функции поддерживаются всеми языками.

Ответ 17

этот ниже код работает весь текст, пожалуйста, используйте его:

$des = str_replace('\n',' ',$des);
$des = str_replace('\r',' ',$des);

Ответ 18

Я решаю свою проблему, используя код ниже

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

Ответ 19

Многие из этих решений не спомогли мне. Это сделал трюк, хотя: -

$svgxml = preg_replace("/(*BSR_ANYCRLF)\R/",'',$svgxml);

Вот ссылка: - PCRE и новые линии

Ответ 20

Вы можете удалить новую строку и несколько пробелов.

$pattern = '~[\r\n\s?]+~';
$name="test1 /
                     test1";
$name = preg_replace( $pattern, "$1 $2",$name);

echo $name;