コメントは私のウェブサイトに入力してください。私はいくつかの愚かなユーザーが空白の空白をたくさん作成することを入力してください[スペース]を入力する[スペース]またはたくさんの入力など PHPでは、どのように合法的な単一の入力またはダブル '入力入力'間にスペースがあります。 例えば、これはOKです:PHPの正規表現。ユーザーが改行を追加しないようにしてください。
\n\n
はこれではありません:
\n\n\n...
\n\n \n...
\n \n \n...
コメントは私のウェブサイトに入力してください。私はいくつかの愚かなユーザーが空白の空白をたくさん作成することを入力してください[スペース]を入力する[スペース]またはたくさんの入力など PHPでは、どのように合法的な単一の入力またはダブル '入力入力'間にスペースがあります。 例えば、これはOKです:PHPの正規表現。ユーザーが改行を追加しないようにしてください。
\n\n
はこれではありません:
\n\n\n...
\n\n \n...
\n \n \n...
最終的には動作しテストしました。私は正規表現コードをシンプルにするために、2回の置き換えでこのプロセスを中断することにしました(あなたが望むなら両方を組み合わせることができます)。
最初のもの(/\n | {1,} | \n/
)は、ランダムな組み合わせの空白と、\n
文字を探して、ソロを残します\n
。
第2のもの('/(?<=\n{2})\n*/'
)は、「\ n \ n」(二重改行)の後に続く\n
文字のいずれかのグループと一致するように、裏返し機能を使用します。
テスト:
$string ="
Loren Ipsum Dolor Sit Amet\n
Loren Ipsum Dolor Sit Amet\n
\n
Loren Ipsum Dolor Sit Amet\n
\n
\n
Loren Ipsum Dolor Sit Amet\n
\n
\n
\n
.\n
\n
..\n
.....\n
.\n
...\n
Loren Ipsum Dolor Sit Amet";
$string = preg_replace('/\n | {1,} | \n/', '', $string);
$string = preg_replace('/(?<=\n{2})\n*/', '', $string);
echo $string;
出力:
Loren Ipsum Dolor Sit Amet\n
Loren Ipsum Dolor Sit Amet\n
\n
Loren Ipsum Dolor Sit Amet\n
\n
Loren Ipsum Dolor Sit Amet\n
\n
Loren Ipsum Dolor Sit Amet
私は正規表現の第一人者ないんだけど、私はそれが既にきちんと問題を解決だと思います。
$fixed = preg_replace('/\n\s+/', '\n', $bad);
1つの以上の空白文字(スペース、タブ、等。)に続く任意の改行を見つけて、それを置き換えます一回の改行で。
$new_text = preg_replace('/\n\s+\n/','\n',$original_text)`
ハンドル:行の
\n
は(\s
に注意しので、このパターンは\n{3,}
一致何含む[ \r\t\n]
である)別の\n
続く間に空白で\n
を。 \s+
は貪欲なので、できるだけ多くの中間スペースと\n
を手に入れます。この正規表現は(あなたが保存されたかった)\n\n
を除いて、少なくとも2つの\n
Sを含む文字列の一部を置き換えることに注意してください。
EDIT(@AlanMooreのおかげで、以下のコメントを参照してください):それはあなたの元の質問が指定されているそれらを完全に削除するのではなく、単一の\n
でこれらの「あまりにも多くの\ n」は出現箇所を置き換えます。これは、入力文字列がfoo\n\n\nbar
だった場合は、結果文字列としてfoobar
よりもfoo\nbar
があるようです。
これらのすべての事象を完全に削除する場合は、\n
ではなく、上記の''
と置き換えてください。
いいですが、置換文字列を ''\ n \ n' 'にするべきではありませんか?また、 '\ s'は' [\ r \ t \ n] 'よりも多くの文字にマッチします(しかし、この正規表現はあまり有効ではありません)。 –
Depends - OPは '\ n'と' \ n \ n'を保存したいが他の組み合わせは削除したいと言いました。 –
元の文字列が 'foo \ n \ n \ nbar'の場合は、' foobar'に変更します。それは私には見えません。 –
これは\ n \ nの有効なエントリを考慮しておらず、 "\ n \ n \ n \ n \ n \ n \ n"(すべての空白)を占めていません。可能であれば、すべての空白を2倍の最大出力に集約できますか?\ n \ n? – Justin
私はregexを使う必要がないので、preg_replace()の代わりにstr_replace()を使います。 – CBusBus
@ Soliver:これらの邪悪な人々は一貫して邪悪であり、さまざまな量で複数のスペースを作っていないと推定しています。 str_replaceは、固定された単一のパターンを変えない場合に適しています。 –