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

2022-08-30 06:01:02
$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));

推荐