用两个空格替换所有换行符并将其还原

时间:2014-04-12 04:58:47

标签: php regex preg-replace str-replace

我试图用两个空格暂时替换所有换行符,并在字符串上的某些函数将其从两个空格恢复为换行符。

但它不起作用。它不会恢复换行符。

这就是我的所作所为:

  1. 首先用一个空格替换所有重复的空格。

    $text = preg_replace( '/\s+/', ' ',$text );
    
  2. 用两个空格替换换行符。

    $text = str_replace( array( '\r', '\r\n', '\n'), '  ', $text );
    
  3. 运行一些功能..

  4. 恢复换行符

    $text = str_replace( '  ', '\n', $text );
    
  5. 据我所知,它用一个空格替换了换行符。不像定义其中两个。怎么了?使用\s\s不会改变事情。


    测试了一些东西:

    str_replace(第2步)仅在我使用preg_replace替换重复的空格后才检测到换行符(步骤1)。

    没有第1步就行了。

3 个答案:

答案 0 :(得分:1)

我建议使用那些:

  1. $text = preg_replace('/ +/', ' ', $text);

    这将只替换空格。 \s将匹配不仅仅是空格,因为它还匹配垂直空格,如换行符,回车符......因此,您的第二个替换品没有要替换的任何换行符。

  2. $text = str_replace(array("\r", "\r\n", "\n"), ' ', $text);

    正如hkpotter92已经指出的那样,你需要使用双引号,否则,你试图匹配文字字符而不是carriable return和换行符。

  3. $text = str_replace(' ', "\n", $text);

    再次,你必须在这里使用双引号,否则,你最终会用文字\n代替双重空格。

  4. ideone demo

答案 1 :(得分:0)

PHP considers '\n'是字面\n字符串,而不是换行符。您需要为作业使用双引号("):

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

答案 2 :(得分:0)

正则表达式\s表示whitespace (\n, \r, \t, \f, and " ")。这就是为什么它会改变你的换行符。使用字符类[ ]中的空格仅用于空格。

$text = preg_replace( '/[ ]+/', ' ',$text );

要将换行符更改为双精度空格,请使用此双精度值。

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

或者,你也可以使用preg_replace

$text = preg_replace( '/[\n\r]/', '  ',$text );