2

行ごとに空白や文字を正確に削除し、行内に配置する方法を考えていました。これに関する情報は見つかりませんが、PHP が役立つと思いtrim()ます。また、動的テキストの解決策についても考えていました。空の行をすべて削除したいところ。またはそれらのほんの一部。

例:

> 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 つ以上の改行 (つまり、連続する 2 つ以上の空行) を 2 つの改行 (1 つの空行) に置き換えます。

空にしか見えない行 (つまり、スペースのみの行) で機能することを確認するには、式を少し変更する必要があります。

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 に答える