web-dev-qa-db-ja.com

文字列から新しい行を削除し、1つの空白スペースに置き換えます

$string = "
put returns between paragraphs

for linebreak add 2 spaces at end

";

文字列からすべての新しい行を削除します。

私はこの正規表現を使っています。それらすべてを捕らえることができます。問題は、どの関数を使うべきかわからないということです。

/\r\n|\r|\n/

$stringは次のようになります。

$string = "put returns between paragraphs for linebreak add 2 spaces at end ";
251
James

二重改行には注意が必要です。二重改行は二重スペースの原因になります。この非常に効率的な正規表現を使ってください。

$string = trim(preg_replace('/\s\s+/', ' ', $string));

複数のスペースと改行は単一のスペースに置き換えられます。

編集: 他の人が指摘しているように、この解決法は単語の間にある単一の改行と一致する問題があります。これは例にはありませんが、そのような状況がどのように発生する可能性があるかを容易に確認できます。別の方法は次のようにすることです。

$string = trim(preg_replace('/\s+/', ' ', $string));
505
jwueller

受け入れられた答えに関するいくつかのコメント:

+は "1以上"を意味します。 \sを繰り返す必要はないと思います。私はあなたが単に'/\s+/'を書くことができると思います。

また、文字列の最初と最後の空白を削除したい場合はtrimを追加してください。

これらの変更を加えると、コードは次のようになります。

$string = preg_replace('/\s+/', ' ', trim($string));
167
matsolof

preg_replace() を使うだけ

$string = preg_replace('~[\r\n]+~', '', $string);

このコードでは str_replace() を使用しなくても済むかもしれませんが、コードはきれいには見えません。

$string = str_replace(array("\n", "\r"), '', $string);

ideone でライブで見る

66
$string = str_replace(array("\n", "\r"), ' ', $string);
19
fabrik

あなたはその速度と配列で二重引用符を使うためにstr_replaceを使うべきです

str_replace(array("\r\n","\r"),"",$string);
11
RobertPitt

PCRE正規表現の置き換えはpreg_replaceを使って行うことができます: http://php.net/manual/en/function.preg-replace.php

$new_string = preg_replace("/\r\n|\r|\n/", ' ', $old_string);

改行を置き換えるか、またはスペースを使用して文字を返します。何も置き換えたくない場合は、2番目の引数を''に変更します。

6
n00dle

これを使って:

一連の改行を空の文字列に置き換えます。

$string = preg_replace("/[\\n\\r]+/", "", $string);

または、おそらく改行を単一のスペースに置き換えたいと思います。

$string = preg_replace("/[\\n\\r]+/", " ", $string);
5
netom

エスケープシーケンス\R は一般的な改行に一致します

つまり、Unicodeによる 改行シーケンス と見なされるものすべてです。これには、\v 垂直空白 )に一致するすべての文字、および複数文字シーケンス\x0D\x0A...が含まれます。

$string = preg_replace('/\R+/', " ", $string);

8ビット非UTF-8モードでは、\Rは次のものと同等です。(?>\r\n|\n|\x0b|\f|\r|\x85)... pcre.org

Regex101デモ

4
Anton

多分これは動作します:

$str='\n';
echo str_replace('\n','',$str);
2
زياد

テキストの改行は一般に次のように表されます。

\r\n - Windowsコンピュータの場合

\r - アップル製コンピュータの場合

\n - Linuxの場合

//Removes all 3 types of line breaks

$string = str_replace("\r", "", $string);

$string = str_replace("\n", "", $string);
2

これがすでに送信された回答に対して何らかの価値があるかどうかはわかりませんが、投稿することもできます。

// Create an array with the values you want to replace
$searches = array("\r", "\n", "\r\n");

// Replace the line breaks with a space
str_replace($searches, "", $string);

// Replace multiple spaces with one
$output = preg_replace('!\s+!', ' ', $string);
2
Peter

いただきました:

$string = trim( str_replace( PHP_EOL, ' ', $string ) );

\ n私が間違っていなければ\ nすべてのシステムで正しく動作するわけではないので、これはかなり堅牢な解決策であるべきです。

2
GDY

以下のコードを試すと、テキスト内の空白と新しい行が保持されます。

$str = "
put returns between paragraphs

for linebreak add 2 spaces at end

";

echo preg_replace( "/\r|\n/", "", $str );
1
PCMShaper

これもタブを削除します

$string = preg_replace('~[\r\n\t]+~', '', $text);
1
user3213174

誰も正規表現についてほとんど知らないことに驚きました。

PHPの改行を削除

$str = preg_replace('/\r?\n$/', ' ', $str);

Perlで

$str =~ s/\r?\n$/ /g;

意味は、行末の改行文字(効率のため)(オプションでキャリッジリターンが前に付く)をスペースに置き換えます。

\ nまたは\ 015は改行です。\rまたは\ 012は復帰です。 ?正規表現では、前の文字の1または0に一致することを意味します。正規表現の$は、行末に一致することを意味します。

元の最高の正規表現リファレンスはperldoc perlreです。すべてのコーダーはこのドキュメントをよく知っているはずです: http://perldoc.Perl.org/perlre.html すべての機能がすべての言語でサポートされているわけではありません。

1
ekerner

これが私が使うパターンです

$string = preg_replace('@[\s]{2,}@',' ',$string);
1
Rajeev

このコードの下のすべてのテキストはそれを使用してください:

$des = str_replace('\n',' ',$des);
$des = str_replace('\r',' ',$des);
0
user8031209

これらの解決策の多くは私にはうまくいきませんでした。これはトリックでしたが -

$svgxml = preg_replace("/(*BSR_ANYCRLF)\R/",'',$svgxml);

これが参照です: - PCREと改行

0

改行と複数の空白を削除できます。

$pattern = '~[\r\n\s?]+~';
$name="test1 /
                     test1";
$name = preg_replace( $pattern, "$1 $2",$name);

echo $name;
0
Ramesh