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

$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 ";
582489 次浏览

只需使用preg_replace()即可

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

你可以在这个例子中使用str_replace(),尽管代码看起来不那么干净:

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

ideone上看到它

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

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

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

编辑:正如其他人指出的那样,这个解决方案在单词之间匹配单个换行有问题。这在示例中没有出现,但是可以很容易地看到这种情况是如何发生的。另一种选择是这样做:

$string = trim(preg_replace('/\s+/', ' ', $string));
$string = str_replace(array("\n", "\r"), ' ', $string);
PCRE正则表达式替换可以使用preg_replace完成: http://php.net/manual/en/function.preg-replace.php < / p >
$new_string = preg_replace("/\r\n|\r|\n/", ' ', $old_string);

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

用这个:

将换行符替换为空字符串:

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

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

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

为了提高速度,应该使用str_replace,并对数组使用双引号

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

这就是我要用的模式

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

对已接受答案的一些评论:

+表示“1或多个”。我认为你不需要重复\s。我认为你可以简单地写'/\s+/'

另外,如果你想移除字符串的第一个和最后一个空格,添加trim

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

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

转义序列\R匹配泛型换行符

也就是说,任何被Unicode认为是linebreak序列的东西。这包括由\v (垂直空格)匹配的所有字符,以及多字符序列\x0D\x0A

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

在8位非utf -8模式下,\R等价于以下内容:pcre.org

Regex101 Demo

这个选项也会删除制表符

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

我不确定这是否对已经提交的答案有任何价值,但我也可以张贴它。

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


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


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

什么:

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

这应该是一个相当健壮的解决方案,因为\n不会在所有系统中正确工作,如果我没有错的话…

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

$str = "
put returns between paragraphs


for linebreak add 2 spaces at end


";


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

我惊讶地发现,每个人对正则表达式知之甚少。

php中的换行符是

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

在perl中

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

意思是替换行末的任何换行符(为了效率)-可选在回车符之前-用空格。

\n或\015为换行符。 \r或\012是回车。 ? 在正则表达式中,表示匹配前一个字符的1或0。

. $在正则表达式中表示匹配行结束 最初最好的正则表达式参考是perldoc perlre,每个程序员都应该非常了解这个doc: http://perldoc.perl.org/perlre.html 注意并非所有语言都支持所有特性

也许这样行得通:

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

以下代码工作所有文本请使用它:

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

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

\ r \ n -在windows计算机上

r \ -在苹果电脑上

\ n -在Linux上

//Removes all 3 types of line breaks


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


$string = str_replace("\n", "", $string);
这些解决方案中有很多对我都不起作用。 这个方法成功了:-

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

以下是参考:- PCRE和New Lines < / p >

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

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


echo $name;

使用上述解决方案的组合,这条线对我来说很有效

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

它删除了“\r”和“\n”。

非常简单的

$hello = "
A
B
C
";
str_replace("
", " ", $hello);
// A B C