从字符串中修剪多个换行符和多个空格?

时间:2011-09-07 02:54:18

标签: php regex preg-replace trim

如何修剪多个换行符?

例如,

$text ="similique sunt in culpa qui officia


deserunt mollitia animi, id est laborum et dolorum fuga. 



Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore
"

我试过这个answe r,但它不适用于我认为的上述情况,

$text = preg_replace("/\n+/","\n",trim($text));

我想得到的答案是,

$text ="similique sunt in culpa qui officia

    deserunt mollitia animi, id est laborum et dolorum fuga. 

    Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore
    "

只接受单行中断

另外我想同时修剪多个空白区域,如果我在下面这样做,我就无法保存任何换行符!

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

如何在线正则表达式中完成这两件事?

2 个答案:

答案 0 :(得分:7)

在这种情况下,您的换行符是\r\n,而不是\n

$text = preg_replace("/(\r\n){3,}/","\r\n\r\n",trim($text));

说“每次发现3个或更多换行符时,请用2个换行符替换它们”。

位:

$text = preg_replace("/ +/", " ", $text);
//If you want to get rid of the extra space at the start of the line:
$text = preg_replace("/^ +/", "", $text);

演示:http://codepad.org/PmDE6cDm

答案 1 :(得分:0)

不确定这是否是最好的方法,但我会使用爆炸。例如:

function remove_extra_lines($text)
{
  $text1 = explode("\n", $text); //$text1 will be an array
  $textfinal = "";
  for ($i=0, count($text1), $i++) {
    if ($text1[$i]!="") {
      if ($textfinal == "") {
        $textfinal .= "\n";  //adds 1 new line between each original line
      }
      $textfinal .= trim($text1[$i]);
    }
  }
  return $textfinal;
}

我希望这会有所帮助。祝你好运!