正規表現で冗長な改行を削除する
-
03-07-2019 - |
質問
単にメッセージを表示する単一の配信サイトをPHPで開発しています訪問者によって投稿されます(ウェブサイトのトピックを理想的に囲んでいます)。誰でも1時間に最大3つのメッセージを投稿できます。
ウェブサイトは1ページのみなので、各メッセージの縦の長さを制御したいと思います。ただし、元のメッセージの改行を少なくとも部分的に保存する必要があります。妥協案は、2つの改行を許可することですが、3つ以上ある場合は、合計2つの改行で連続して置き換えます。スタックオーバーフローはこれを実装します。
例:
<!> quot; Porcupines \ nare \ n \ n \ n \ n \ nporcupiney。<!> quot;
に変更されます
<!> quot;ヤマアラシ<!> lt; br / <!> gt; are <!> lt; br / <!> gt; <!> lt; br / <!> gt; porcupiney。<! > quot;
改行をチェックする際の注意すべき点の1つは、改行が収集されて\ r \ n、\ r、または\ nとして保存される可能性があることです。 nl2br()を使用して、すべての改行を<!> lt; br / <!> gt; sに変換することを考えましたが、それは不要に思えました。
私の質問:PHPで正規表現(preg_match()やpreg_replace()などの関数を使用)を使用して、連続する2つ以上の改行(それらの間の空白の有無にかかわらず)のインスタンスを確認する方法それらを合計2つの改行に変更しますか?
解決
preg_replace('/(?:(?:\r\n|\r|\n)\s*){2}/s', "\n\n", $text)
他のヒント
次のようなもの
preg_replace('/(\r|\n|\r\n){2,}/', '<br/><br/>', $text);
動作するはずです。 PHPの構文は正確には覚えていませんが、さらにエスケープする必要があります:-/