改行コードの正規表現(CR、LF、CRLF全対応)

後述しますが、正規表現なら\n、\r、\r\nの3パターンを入れとけば問題なし。

例えばJavascriptコードなら下記。言語によって多少記述は変わると思うので、その辺はうまいこと書き換えてお使いください。

const br = /\r\n|\n|\r/g;
// 定数brとして宣言
// 繰り返しマッチさせる必要ないがときは末尾の修飾辞gを削除

そしてなぜこうなるのか詳しく解説します。

改行コードには主に3種類ある

改行コード名称正規表現
CRCarriage Return(キャリッジリターン)\r
LFLine Feed(ラインフィード)\n
CRLFCarriage Return Line Feed(キャリッジリターン&ラインフィード)\r\n
改行コードCR、LF、CRLFそれぞれの名称と正規表現

主な改行コードはCR、LF、CRLFの3種類Enter / Returnを押したとして、実際にどれが入力されるかは環境によって変わってきます。

OSでは主にWindowsがCRLFで、ほかMacOSX以降、Android、Unix、LinuxなどがLFMacOS9以前のMacではCR

なので、正規表現では3種類とも対応させる/\r\n|\n|\r/にしているわけです。

また、OSのみならず入力するソフトウェア・アプリケーションによっても変わったりします。

例えばスプレッドシートのセル内改行はWindowsでもLFだったり。Excelもセル内改行はLFだったような。

なお、さくらエディタなど専門的なテキストエディタだとファイルごとんいどの改行コードで改行させるかを指定できたりもします。

この辺について詳しくは別途記事にしていますので、どうぞ下記リンクより。

正規表現のメタ文字 \s とは違いが

正規表現の\sは空白文字全般で、\r\nなど改行も含まれます。

が、\sは改行コードのほかほか半角スペース、\t(タブ)、\f(改ページ)も含んでしまうため、厳密には改行コードととは言えません。

カッチリ\r\n|/\n|\r/gで指定した方が無難です。

正規表現 /\r\n|\n|\r と /\r?\n の違い

改行コードの正規表現について\r\n|/\n|\r/gではなく、/\r?\n/gで解説しているサイトさんも多いです。

実用性でいえば問題ないかなとは思います。書き方もスタイリッシュだし。

ただ、/\r?\n/g\nもしくは\r\nって意味。\rが未対応なので3種すべてを検出することはないような。

\r = CRだけの改行コードはMacOS Xになる前の古いMacぐらい。

いまどき使われることはあまりないとは思いますが、古いMacマシンを使ってる変態さんがゼロとは限りません。なので、あえてでなければ3種すべてに対応した方が無難かなと思います。

Macでバックスラッシュを出す方法

なお、MacではOption + ¥ で半角バックスラッシュ\を入力できます。

言語とかエディタによっては半角円マーク¥でも半角バックスラッシュ\として扱ってくれることもあるようですが、なるべくちゃんと記述した方が安全かなと思う。