it-swarm.com.ru

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

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

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

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

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

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

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

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

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

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

С этими изменениями код будет:

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

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

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

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

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

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

63
NullUserException
$string = str_replace(array("\n", "\r"), ' ', $string);
19
fabrik

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

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

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

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

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

6
n00dle

Использовать этот:

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

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

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

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

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

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

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

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

Regex101 Demo

4
Anton

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

$str='\n';
echo str_replace('\n','',$str);
2
زياد

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

// 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
Peter

Что насчет:

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

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

2
Johannes Grandy

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

$str = "
put returns between paragraphs

for linebreak add 2 spaces at end

";

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

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

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

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

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

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

\n - в Linux

//Removes all 3 types of line breaks

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

$string = str_replace("\n", "", $string);
1
Md. Al Amin Bhuiyan

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

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

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

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

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

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

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

0
Adam Whateverson

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

Уберите переводы строк в 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
ekerner