繁体   English   中英

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

[英]Remove new lines from string and replace with one empty space

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

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

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

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

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

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

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

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

此外,如果要删除字符串中的第一个和最后一个空格,请添加trim

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

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

只需使用preg_replace()

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

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

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

ideone观看直播

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

您应该使用 str_replace 来提高速度并在数组中使用双引号

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

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

// 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);

转义序列\\R匹配通用换行符

也就是说,任何被 Unicode 视为换行符的序列 这包括与\\v垂直空白)匹配的所有字符,以及多字符序列\\x0D\\x0A ...

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

在 8 位非 UTF-8 模式下, \\R等效于以下内容: (?>\\r\\n|\\n|\\x0b|\\f|\\r|\\x85) ... pcre.org

Regex101 演示

PCRE 正则表达式替换可以使用 preg_replace 完成: http : //php.net/manual/en/function.preg-replace.php

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

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

使用这个:

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

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

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

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

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

在 php 中去除换行符是

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

在 perl 中

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

意思是用空格替换行尾的任何换行符(为了效率) - 可选地前面有一个回车符 - 。

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

原始和最好的正则表达式参考是 perldoc perlre,每个编码人员都应该非常了解这个文档: http ://perldoc.perl.org/perlre.html 注意并非所有功能都支持所有语言。

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

\\r\\n - 在 Windows 计算机上

\\r - 在苹果电脑上

\\n - 在 Linux 上

//Removes all 3 types of line breaks

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

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

关于:

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

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

这是我会使用的模式

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

这个也删除了标签

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

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

$str = "
put returns between paragraphs

for linebreak add 2 spaces at end

";

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

也许这有效:

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

许多这些解决方案对我不起作用。 不过,这确实奏效了:-

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

这是参考:- PCRE 和新行

很简单

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

下面的代码适用于所有文本,请使用它:

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

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

$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'。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM