2

我只是想知道我如何才能准确地删除空格,甚至逐行和行内的位置。我找不到有关此的信息,但我认为 PHPtrim()可以提供帮助。我也在考虑动态文本的解决方案。我想要删除所有空行的地方。或者只是其中一些。

一个例子:

> here is text blabla
> 
> here is text balabla  balabala
> 
1
2 
3 
> oops too much space
> 
> also here is text

现在我怎样才能去掉 3 个空格呢?

它必须变成这样:

> here is text blabla
> 
> here is text balabla  balabala
> 
> oops too much space
> 
> also here is text
4

3 回答 3

4

似乎您想要正则表达式:

preg_replace("#(\r?\n){3,}#", "\n\n", $str);

它用两个换行符(一个空行)替换 3 个或更多换行符(即两个连续的空行或更多)。

为确保它适用于只显示为空的行(即只有空格的行),您需要稍微改变表达式:

preg_replace("#(\r?\n\s*){3,}#", "\\1\\1", $str);

免责声明:这个\\1\\1想法来自 NullPointerException :)

您也可以采取不同的路线并迭代解决:

// $final is the result of the operation
// $n keeps track of how many empty lines were seen
$final = ''; $n = 0;
// $str is the original content, we split it into separate lines
foreach (preg_split("/\r?\n/", $str) as $line) {
        if (strlen(trim($line))) {
                $n = 0;
        } elseif (++$n >= 2) {
                continue;
        }
        // append to the final result
        $final .= "$line\n";
}
// rtrim($final, "\n");

事实证明,explode()在上述迭代解决方案中使用可以提高性能;它仍然适用于只有空格的行,因为trim(). 但是,您需要使用 修剪右侧的换行符rtrim($final, "\n");

于 2012-10-10T08:26:27.173 回答
1

不是正则表达式解决方案:

 function stripEmptyNewlines($string,$limit = 1){
     $array = explode("\n",$string);
     $emptyLine = 0;
     $newString = "";
     foreach($array as $child){
         if(trim($child) == "") {
             $emptyLine++;
         } else {
             $emptyLine = 0;
         }
         if($emptyLine < $limit + 1){
             $newString .= "\n" . $child;
         }
     }
     return $newString;
 }
于 2012-10-10T08:30:23.927 回答
-1

在您的文本上使用 ReadLine() 方法。

如果 ReadLine().Trim() != "",则将其添加到输出字符串。(否则它将是一个空行)

于 2012-10-10T08:25:25.317 回答