5

trim() のようなものを探していますが、文字列の境界内にあります。ユーザーは、入力後に 2、3、4、またはそれ以上の改行を入れることがあります。この入力をサニタイズする必要があります。

サンプル入力

i like cats


my cat is happy
i love my cat



hope you have a nice day

望ましい出力

i like cats

my cat is happy
i love my cat

hope you have a nice day

組み込みのものは何も表示されません。文字列の置換は、作業を行うために何度も繰り返す必要があります。小さな再帰的な文字列置換を作成する前に、他にどんな提案があるか知りたいと思いました。

これにも正規表現があるという奇妙な感じがあります。

4

5 に答える 5

10
function str_squeeze($body) {
    return preg_replace("/\n\n+/", "\n\n", $body);
}
于 2009-04-08T06:00:13.337 に答える
3

これを行うにはどのくらいのテキストが必要ですか? 約100k未満の場合は、おそらく単純な検索を使用して正規表現を置き換えることができます(次のようなものを検索してに置き換え/\n+/ます\n

一方、メガバイトのデータを処理する必要がある場合は、テキストを文字ごとに解析し、入力を出力にコピーできます。ただし、複数の改行が検出された場合は除きます。休み。

ただし、再帰的な文字列の置換はお勧めしません。非常に遅くなるようです。

于 2009-04-08T05:55:23.753 に答える
3

3 つの改行シーケンスすべてを考慮するには、次のようにします。

preg_replace('/(?:\r\n|[\r\n]){2,}/', "\n\n", $str)
于 2009-04-09T07:57:55.960 に答える
3

最終的にそれを取得することができました.phpでPCREバージョンを使用しているため、pregが必要です。また、すべての行末を消去するのではなく、1つではなく\n\n置換文字列が必要です。

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

私を正しい軌道に乗せてくれてありがとう。

于 2009-04-08T07:01:21.300 に答える
2

次の正規表現は、単一の改行を無視しながら複数の改行を削除する必要があります。これは、定義上問題ありません。

ereg_replace("\n\n+", "\n\n", $string);

このPHP 正規表現テスト ツールでテストできます。これは非常に便利です (ただし、PHP と完全に同等ではないようです)。

[編集] ' を " に修正しました。機能していないように見えたためです。Web ツールで正規表現をテストしたことを認めなければなりません。;)

于 2009-04-08T06:13:22.820 に答える