web-dev-qa-db-ja.com

改行を削除するためのクロスプラットフォーム正規表現とは何ですか?

これは以前に尋ねられたことは確かですが、見つかりません。

基本的に、不明なOriginのテキストファイルを解析していて、改行を他の区切り文字に置き換えたい場合、これが最良の正規表現ですか、それとも別の区切り文字ですか?

(\r\n)|(\n)|(\r)

28
Fletcher Moore

フレッチャー-これは以前に一度尋ねられました。

ここに行きます: クロスプラットフォームの改行文字に一致する正規表現

  • スポイラー警告!

正確にしたいときに使用する正規表現は「\ r\n?|\n」です。

39
Bobby B

Unicode行終端文字を見つけるための正規表現は、少なくともPerlでは、drewkが書いたものではなく(?>\x0D\x0A?|[\x0A-\x0C\x85\x{2028}\x{2029}])である必要があります。 Perl 5.10.0のドキュメントから直接取得しました(後のバージョンでは削除されました)。 \xの後の括弧に注意してください:U + 2029は\x{2029}ですが、\x2029はASCII空白(U + 0020)+数字2 +数字です9. \nが文字クラスの外にある場合、\x{0a}との一致も保証されません。

2
bpj

上記の@dawgで提案されているように、プラットフォームが\Rクラスをサポートしていない場合でも、プラットフォームが負の ルックアラウンドをサポートしていれば、かなりエレガントで堅牢なソリューションを作成できる場合があります または文字クラスの減算(例:Javaクラスの減算は syntax[x&&[^y]]による)です)。

ほとんどの正規表現文法では、ドット文字は「改行文字以外の任意の文字」を意味するように定義されています(たとえば、JavaScriptの場合は、 こちら を参照)。次の特性を持つものと一致する場合:

  1. ない(改行文字を除く任意の文字)→改行文字。そして
  2. 空白です

私は現在JavaScriptで作業しているため、AFAIKには\R省略形またはの文字クラス減算はありませんが、引き続き負の値を使用できます私が欲しいものを得るために先読み。次の正規表現は、すべての改行に一致します。

/((?!.)\s)+/g

次のJavaScriptコードは、少なくともWindows 7でChrome 42.0.2311.90mで実行すると、JavaScriptのあらゆる種類の改行(つまり、@ dawgの3番目の段落で言及されている「ECMAScript」)を一掃します)認識:

var input = "hello\r\n\f\v\u2028\u2029 world";
var output = input.replace(/((?!.)\s)+/g, "");
document.write(output); // hello world
1
0xbe5077ed

/[\r\n]+/g空の文字列""

すべてを置き換えます\rおよび\n文字列に現れる順序に関係なく。

0
Amarghosh