从字符串中删除新行并替换为一个空格

问题描述 投票:257回答:19
$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 ";
php regex string
19个回答
523
投票

您必须小心双线换行,这会导致双倍空格。使用这个非常有效的正则表达式

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

多个空格和换行符被替换为单个空格。

编辑:正如其他人所指出的,此解决方案在单词之间存在匹配单个换行符的问题。这在示例中不存在,但可以很容易地看出这种情况是如何发生的。另一种方法是执行以下操作:

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

3
投票

文本中的换行符通常表示为:

\ r \ n - 在Windows计算机上

\ r \ n-在Apple电脑上

\ n - 在Linux上

//Removes all 3 types of line breaks

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

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

2
投票

这是我将使用的模式

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

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
投票

也许这有效:

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

1
投票

这个也删除了标签

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

1
投票

您可以尝试下面的代码将保留文本中的任何空格和新行。

$str = "
put returns between paragraphs

for linebreak add 2 spaces at end

";

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

1
投票

我很惊讶地看到每个人都对正则表达式知之甚少。

在PHP中删除换行符是

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

在perl

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

含义替换行末尾的任何换行符(为了提高效率) - 可选地以回车符开头 - 带空格。

\ n或\ 015是换行符。 \ r \ \ 012是回车。 ?在正则表达式中意味着匹配前一个字符的1或0。 $ in regex表示匹配行尾。

最初和最好的正则表达式引用是perldoc perlre,每个编码器都应该很好地了解这个文档:http://perldoc.perl.org/perlre.html注意并非所有语言都支持所有功能。


0
投票

这下面的代码工作所有文本请使用它:

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

0
投票

许多这些解决方案对我不起作用。这样就可以了: -

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

以下是参考: - PCRE and New Lines


0
投票

您可以删除新行和多个空格。

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

echo $name;

168
投票

关于接受的答案的一些评论:

+的意思是“1或更多”。我认为你不需要重复\s。我想你可以简单地写'/\s+/'

此外,如果要在字符串中首先删除空格,请添加trim

通过这些修改,代码将是:

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

69
投票

只需使用preg_replace()

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

你可以在这个上使用str_replace(),虽然代码看起来不干净:

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

ideone上看到它


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

11
投票

您应该使用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);

将用空格替换新行或返回字符。如果您不想要任何替换它们,请将第二个参数更改为''


5
投票

用这个:

用空字符串替换一系列换行符:

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

或者你可能想用一个空格替换换行符:

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

4
投票

Escape sequence \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
投票

关于:

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

这应该是一个非常强大的解决方案,因为如果我没有错,\ n在所有系统中都无法正常工作......

© www.soinside.com 2019 - 2024. All rights reserved.