2011-09-10 8 views
1

私はredditで見たように私のウェブサイトで同じことをしたいと思っています。一度の\ nとき に、それは動作しません、私はこの試みた1
n nに nを入力し、PHPでユニークな nを無効にする(アラート)

を取得するために、2つの\ N \ Nを行う必要があります。

$texte = preg_replace('#{\n}#', '', $texte); 
$texte = preg_replace('#{\n}{\n}#', '\n', $texte); 
$texte = nl2br($texte); 

をし、それが動作しません...誰かが助けることができる?

+1

が、私はこのために(BBCode-/Markdown-)パーサのredditの使用を前提としています。彼らは他の要素( '[b]いくつかのテキスト[/ i]'や '__text__'など)も置き換えましたか? – KingCrunch

+0

彼らは実際には:http://www.reddit.com/help/commenting –

+0

それはおそらくパーサー(とにかく、正規表現よりもはるかにクリーンです)) – KingCrunch

答えて

2

これを試してみてください:

$texte = preg_replace('#(\r\n|\r)#', "\n", $texte); 
$texte = preg_replace('#\n(?!\n)#', ' ', $texte); 
$texte = preg_replace('#\n\n#', "\n", $texte); 
$texte = nl2br($texte); 

最初の行は行末を正規化します。 2つ目は、単一の\nをスペースで置き換えます。 3行目は、ダブル\nを1つ置き換えます。 (*BSR_ANYCRLF)オプション付き

+0

それはうまく動作しますが、4つの連続を行うと\ n出力するとnl2brを出力しません\ n) –

+0

最後に\\ – Manhim

+0

wow niceをダブルクォートで置き換えます。私はpregの一重引用符と二重引用符の違いを知らなかった。 –

5
$str = preg_replace('~(*BSR_ANYCRLF)\R(\R?)~', '$1', $str); 

\RはどんなCRLFタイプの改行シーケンスを(すべてのUnicode改行にマッチするオプションをドロップ)と一致します。

\R(\R)?$1 = '\R'には2つの改行があり、$1 = ''には改行が1つあります。


上記の説明は、1つしかない場合は改行を完全に削除します。これはおそらくあなたが望むものではありません。代わりに、私は一人で、単一の改行を残し、<br />タグをHTMLに二重の改行を変換することをお勧め:

$str = preg_replace('~(*BSR_ANYCRLF)\R{2}~', '<br />', $str); 
+1

それは....素晴らしいです。 –

+0

この回答は、「コントロールの動詞と再帰」の[Stack Overflow Regular Expression FAQ](http://stackoverflow.com/a/22944075/2736496)に追加されました。 – aliteralmind

関連する問題