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

Jam*_*mes 269 php regex string

$string = "
put returns between paragraphs

for linebreak add 2 spaces at end

";
Run Code Online (Sandbox Code Playgroud)

想要从字符串中删除所有新行.

我有这个正则表达式,它可以捕获所有这些,问题是我不知道我应该使用哪个函数.

/\r\n|\r|\n/
Run Code Online (Sandbox Code Playgroud)

$string 应成为:

$string = "put returns between paragraphs for linebreak add 2 spaces at end ";
Run Code Online (Sandbox Code Playgroud)

jwu*_*ler 549

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

$string = trim(preg_replace('/\s\s+/', ' ', $string));
Run Code Online (Sandbox Code Playgroud)

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

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

$string = trim(preg_replace('/\s+/', ' ', $string));
Run Code Online (Sandbox Code Playgroud)

  • 在使用此解决方案之前,请参阅下面的答案以及对我的答案的评论.此解决方案可能无法按预期工作. (9认同)
  • 我在寻找一种解决方案,以删除/替换所有空格,而不是(双)空格。这是做到这一点的正则表达式:`/(?![])\ s + /` (2认同)
  • 错误的。\s 匹配任何空白,包括空格、制表符、换行符、回车符。我不知道这怎么能得到这么多人的支持。要匹配换行符,您需要 \r?\n 这是一个换行符,前面可以选择回车符。 (2认同)

mat*_*lof 172

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

+意思是"1以上".我认为你不需要重复\s.我想你可以简单地写'/\s+/'.

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

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

$string = preg_replace('/\s+/', ' ', trim($string));
Run Code Online (Sandbox Code Playgroud)


Nul*_*ion 75

只是用 preg_replace()

$string = preg_replace('~[\r\n]+~', '', $string);
Run Code Online (Sandbox Code Playgroud)

str_replace()虽然代码看起来不干净,但你可以逃脱这一点:

$string = str_replace(array("\n", "\r"), '', $string);
Run Code Online (Sandbox Code Playgroud)

ideone直播

  • @erik然后我会"修正"它.它工作得很好. (3认同)

fab*_*rik 20

$string = str_replace(array("\n", "\r"), ' ', $string);
Run Code Online (Sandbox Code Playgroud)

  • PHP中的转义序列需要双引号. (3认同)

Rob*_*itt 12

您应该使用str_replace来提高其速度并使用带数组的双引号

str_replace(array("\r\n","\r"),"",$string);
Run Code Online (Sandbox Code Playgroud)

  • 我可能是错的,但此代码不会删除 Unix 系统上的换行符,因为在这些系统上,换行符只是 `\n` 而不是 `\r\n` 而且我认为 OP 要求放置一个空格新线路 (2认同)

Md.*_*yan 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);
Run Code Online (Sandbox Code Playgroud)


小智 8

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

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

$string = preg_replace('/\R+/', " ", $string);
Run Code Online (Sandbox Code Playgroud)

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

Regex101 演示


n00*_*dle 6

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

$new_string = preg_replace("/\r\n|\r|\n/", ' ', $old_string);
Run Code Online (Sandbox Code Playgroud)

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


Pet*_*ter 6

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

// 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);
Run Code Online (Sandbox Code Playgroud)


net*_*tom 5

用这个:

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

$string = preg_replace("/[\\n\\r]+/", "", $string);
Run Code Online (Sandbox Code Playgroud)

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

$string = preg_replace("/[\\n\\r]+/", " ", $string);
Run Code Online (Sandbox Code Playgroud)

  • 这就是为什么我使用单引号,所以我不需要逃避这些字符.`\\n`看起来很糟糕.`\\\\`匹配单个反斜杠很糟糕. (2认同)

Ada*_*son 5

其中许多解决方案对我来说不起作用。但这确实达到了目的:-

$svgxml = preg_replace("/(*BSR_ANYCRLF)\R/",'',$svgxml);
Run Code Online (Sandbox Code Playgroud)

这是参考:- PCRE 和新线