開発ブログ

WWWクリエイターズが送る、Git、CSS、HTML、コマンドライン、Macの便利機能など、開発に関する役立ち情報発信します。気まぐれに更新。

正規表現:改行コードの表現方法。

最終更新:2017-09-21 by Joe

正規表現で、改行コードを表現する方法と、改行にまつわる操作をまとめました。

正規表現における「改行コード」

改行は、制御文字と呼ばれ、通常は目に見えない文字コードで記述されています。これらをマッチングするには、特定の改行コードを表現する必要があります。

ですが、実際の改行コードはOS(オペレーティング・システム)によって、異なる文字コードが使われるため、注意が必要です。これは歴史的な問題なので、深い負いする必要はありませんが、その事実を把握しておくことは必要だと思います。

改行コードの正規表現

OS改行コード正規表現
LinuxなどのUnix系システム
MacOS(v10~)
LF (Line Feed)\n
MacOS (~v9)CR (Carriage Return)\n
WindowsCR + LF\r\n

改行コードについて、Wikiがかなり詳しいですのでご一読下さい。※Macは古いバージョンではCRでしたが、昨今、バージョン10から、Unix系のLFに変更されました。

改行コードをマッチする正規表現

さて、上述のように改行コードが3種類あるため、それらのいずれが使われていても、「改行」としてマッチする正規表現にする必要があります。下記は、PHPでの例です。

PHP

上記の表で示したように、正規表現では、LF、CRはそれぞれ、\n、 \r によって表現できます。

※デリミタに「#」を使っていますが、好みの問題なので、なんでも構いません。

実践:置換による改行コードの統一

1)改行コードの確認

さて、実際に多く問題になるのが、異なるOSで保存されたファイルを取り扱うときです。Windows環境で作成されたを、Linux 環境のVIMで開くと、 一見普通なのですが・・・

正規表現で、改行を置換して削除。

Vimの「:set ff」コマンドで、ファイルフォーマット(Vimで利用する改行の種類)を調べみます。

やはりdos(Windows)とでました。

より正体を暴くために、vimのバイナリモードでファイルを開きます。一旦ファイルを閉じて、下記のコマンドで開き直します。

これで開くと・・

でました。「^M」がCarriage Returnの正体です。(実際はLine Feedの文字コードも文書内に存在しますが、Vim上では実際の改行として表現されています)

これらが紛れ込んでくると、とくにGitのDiffなどで、コード自体は変更がないはずなのに、差分として認識されてしまい、厄介な存在になります。

では、改行を「LF」にで統一するために、「^M」を消してしまいましょう。

2)改行コード「^M」を置換して削除する

マッチの方法がわっているので、あとは置換は簡単ですね。上述のとおり、Carriage Return は「\r」で表現できます。

VIMの例

改行コードの表現には、もう一つの方法があります。このように「^M」の文字を直接マッチさせることもできます。「^M」は特殊な文字記号ですので、入力方法が特殊です。[Ctrl + V]、[Ctrl + M]と二文字、入力します。

あとは保存すれば大丈夫です。

簡単ですね。

参考

信頼のウィキです。