これは以前に尋ねられたことは確かですが、見つかりません。
基本的に、不明なOriginのテキストファイルを解析していて、改行を他の区切り文字に置き換えたい場合、これが最良の正規表現ですか、それとも別の区切り文字ですか?
(\r\n)|(\n)|(\r)
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}
との一致も保証されません。
上記の@dawgで提案されているように、プラットフォームが\R
クラスをサポートしていない場合でも、プラットフォームが負の ルックアラウンドをサポートしていれば、かなりエレガントで堅牢なソリューションを作成できる場合があります または文字クラスの減算(例:Javaクラスの減算は syntax[x&&[^y]]
による)です)。
ほとんどの正規表現文法では、ドット文字は「改行文字以外の任意の文字」を意味するように定義されています(たとえば、JavaScriptの場合は、 こちら を参照)。次の特性を持つものと一致する場合:
私は現在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
/[\r\n]+/g
空の文字列""
。
すべてを置き換えます\r
および\n
文字列に現れる順序に関係なく。