使用PHP正则表达式从字符串中删除换行符

57

如何使用PHP从字符串中删除换行符?

10个回答

103
$string = str_replace(PHP_EOL, '', $string);
或者
$string = str_replace(array("\n","\r"), '', $string);

6
对我来说不起作用。首先,根本没有识别PHP_EOL。其次,如果你先删除 \n,然后再搜索 \r\n,你将找不到它们,因为 \n 已经被删除了。 - MilanG
@MilanG 你可以在这里查看所有预定义的 PHP 常量:http://php.net/manual/en/reserved.constants.php。你会看到其中的 PHP_EOL。关于你的第二个陈述,你可能是正确的,我会修复它。谢谢。 - AntonioCS
我正在尝试从一个单词中删除 \n,但是使用上面的代码 \nStretcher 我无法实现。 - Kunal Rajput

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

20

为了删除多个换行符,建议使用正则表达式:

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

1
+ 符号表示 1 或多个,您不需要第一个 \s - Joe H
\s 正则表达式组不包括制表符和常见空格等内容吗?如果是,那么这个答案就过于贪婪了。 - Kzqai
为什么推荐这样做? - Peter Mortensen

8
最好使用 $string = str_replace(array("\n","\r\n","\r"), '', $string) 来替换字符串。因为从文本区输入时,一些换行符可能会保留原样。

5

stripcslashes足以胜任(可移除\r\n等字符)

$str = stripcslashes($str);

返回一个没有反斜杠的字符串。可以识别类C语言的 \n,\r ... ,八进制和十六进制表示。

2
为什么花了九年多的时间? - Peter Mortensen

5

有一些更加实用的东西(随处可用):

function strip_carriage_returns($string)
{
    return str_replace(array("\n\r", "\n", "\r"), '', $string);
}

2

试一下这个方法。它对我很有效。

首先,从字符串中删除n(在n前使用双斜线)。

然后,像n一样从字符串中删除r

代码:

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

为什么这比Harmen的答案更简单? - Peter Mortensen

2

让我们看一下性能测试!

自从我上次回答这个问题以来,情况发生了变化,所以这里有一个我创建的小测试。我比较了四种最有前途的方法,preg_replace vs. strtr vs. str_replace,而strtr之所以出现两次,是因为它有单字符和数组到数组模式。

您可以在此处运行测试:

        https://deneskellner.com/stackoverflow-examples/1991198/

结果

     251.84 ticks using  preg_replace("/[\r\n]+/"," ",$text);
      81.04 ticks using  strtr($text,["\r"=>"","\n"=>""]);
      11.65 ticks using  str_replace($text,["\r","\n"],["",""])
       4.65 ticks using  strtr($text,"\r\n","  ")

(请注意这是实时测试,服务器负载可能会发生变化,因此您可能会得到不同的数字。)

preg_replace方案明显较慢,但没关系。它们执行不同的任务,PHP没有准备好的正则表达式,因此它每次都在解析表达式。期望它们获胜是不公平的。

另一方面,在第2-3行中,str_replacestrtr几乎执行相同的任务,但性能差异很大。它们处理数组,并且按照我们的要求执行 - 删除换行符,并将其替换为空白。

最后一个是一个卑鄙的技巧:它用字符替换字符,也就是用空格替换换行符。它甚至更快,这是有意义的,因为当你摆脱换行符时,你可能不想将一行的最后一个单词与下一行的第一个单词连接起来。因此,它并不是完全符合OP所描述的,但显然是最快的。对于长字符串和许多替换,差异将增加,因为字符替换本质上是线性的。

结论:总体上str_replace胜出

如果您可以承受使用空格而不是[\r\n],请使用字符的strtr。在平均情况下,它的速度是str_replace的两倍,并且当存在许多短行时,它可能会更快。


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

`\R`匹配通用换行符;也就是说,Unicode认为的任何换行序列。
可以使用`\R`代替`\r\n`。

-1

使用:

function removeP($text) {
    $key = 0;
    $newText = "";
    while ($key < strlen($text)) {
        if(ord($text[$key]) == 9 or
           ord($text[$key]) == 10) {
            //$newText .= '<br>'; // Uncomment this if you want <br> to replace that spacial characters;
        }
        else {
            $newText .= $text[$key];
        }
        // echo $k . "'" . $t[$k] . "'=" . ord($t[$k]) . "<br>";
        $key++;
    }
    return $newText;
}

$myvar = removeP("your string");

注意:这里我没有使用PHP正则表达式,但是你仍然可以移除换行符。

这将移除所有未被preg_replace、str_replace或trim函数移除的换行符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接