Удалить новые строки из строки и заменить их одним пустым пробелом
$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;