Удалить новые строки из строки


$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 ";
Author: James, 2010-09-21

17 answers

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

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

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

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

$string = trim(preg_replace('/\s+/', ' ', $string));
 456
Author: jwueller, 2013-01-21 19:49:56

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

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

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

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

$string = preg_replace('/\s+/', ' ', trim($string));
 152
Author: matsolof, 2010-09-22 15:44:57

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

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

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

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

Смотрите это в прямом эфире на идеоне

 59
Author: NullUserException, 2010-09-21 13:46:36
$string = str_replace(array("\n", "\r"), ' ', $string);
 15
Author: fabrik, 2010-09-21 13:42:29

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

str_replace(array("\r\n","\r"),"",$string);
 12
Author: RobertPitt, 2010-09-21 13:39:41

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

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

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

 6
Author: n00dle, 2010-09-21 13:53:06

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

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

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

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

Демонстрация регулярного выражения 101

 4
Author: Anton, 2017-07-22 21:04:21

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

Замените ряд новых строк пустой строкой:

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

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

$string = preg_replace("/[\\n\\r]+/", " ", $string);
 3
Author: netom, 2010-09-21 13:39:39

О чем:

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

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

 3
Author: Johannes Grandy, 2016-06-08 11:45:58

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

// 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);
 2
Author: Peter, 2015-11-19 13:48:04

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

$string = preg_replace('@[\s]{2,}@',' ',$string);
 1
Author: Rajeev, 2010-09-22 07:10:25

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

$string = preg_replace('~[\r\n\t]+~', '', $text);
 1
Author: user3213174, 2015-05-14 02:23:17

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

$str = "
put returns between paragraphs

for linebreak add 2 spaces at end

";

echo preg_replace( "/\r|\n/", "", $str );
 1
Author: PCMShaper, 2016-11-09 11:00:23

Может быть, это сработает:

$str='\n';
echo str_replace('\n','',$str);
 1
Author: زياد, 2017-04-22 15:54:58

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

$des = str_replace('\n',' ',$des);
$des = str_replace('\r',' ',$des);
 1
Author: mehdi, 2018-06-15 07:38:07

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

Полоса новых строк в php - это

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

В perl

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

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

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

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

 0
Author: ekerner, 2017-02-10 13:54:47

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

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

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

\n - в Linux

//Удаляет все 3 типа разрывов строк

$строка = str_replace("\r", "", $строка);

$строка = str_replace("\n", "", $строка);

 0
Author: Md. Al Amin Bhuiyan, 2018-08-02 12:08:11