2012-05-18 11 views
6

文字列から余分な空白行を削除したいのですが、空白行をすべて空白にします。同様に:空白行を文字列から削除しますが、空白は空白のままにしておいてください。

line1 





line2 

はなるはずです(私はそれを見つけた場所を忘れてしまった)

line1 

line2 

は、私は次の正規表現を見つけました:

preg_replace('/^\n+|^[\t\s]*\n+/m','',$message); 

これは動作しますが、残さずに、すべての空行を削除しますすべての行の間に空の行。

編集:私はちょうどhttp://jsfiddle.net/RAqSS/

+0

はもしかして? –

+0

基本的に、各行の間に2つ以上の空白行がある場合は、1行に減らす必要があります。したがって、基本的に残りの空行は1 emと同じくらい高いはずです。 – Sempiterna

+0

私は、あなたが何を意味するかを「空行」と定義する必要があると思います。あなたが問題で説明しているのは、空の行ではありません。 –

答えて

6

交換してみてください:

\n(\s*\n){2,} 

で:

\n\n 

このように:

preg_replace('/\n(\s*\n){2,}/', "\n\n", $message); // Quotes are important here. 

あなたが空の行をしたくない場合は、あなたがに{2,}を変更します+とし、単一の\nを使用してください。実際には{2,}の代わりに+で動作します。 {2,}は最適化です。あなたのjsFiddleに基づいて

+0

はい、これはまさに私が欲したように動作します。どうもありがとうございます! :) – Sempiterna

+1

これは正確に動作します!'preg_replace( '/ \ n(\ s * \ n)+ /'、" \ n "、$ output);' – Devner

4

で簡単な例を作成し、以下を試してみてください。

preg_replace('/\n(\s*\n)+/', "\n\n", $message); 

これは、単一の改行と空白行のいずれかの数字が続く改行に置き換えられます。

+0

で簡単な例を追加しましたが、うまくいきません。それは何とかすべてのコンテンツを削除し、空の文字列を残します。 – Sempiterna

+0

''\ n''は改行ではありません。 –

+0

@KendallFrey - ありがとう、もともとOPは 'line \ nline2'を求めていましたが、jsfiddleに基づいてOPを正しく解釈していたようです。 –

0

、これを試してみてください。 "になった場合は::LINE1 \ nを\ n個のLINE2"

$result = preg_replace('/\n(\n*\s)+/', "\n\n", $message); 
+0

2番目のコードはほとんど動作します。すべての空行を置き換えて、各テキスト間の空行に置き換えます。しかし、複数の空行を持たない各テキストの間に空の行を追加します。 – Sempiterna

+0

データと期待される結果のより詳細な例で質問を更新できますか? – sudoash

関連する問題