この記事では、正規表現で改行を表す方法について解説します。改行の正規表現を知っておくと、プログラムで表示する文字列に改行を入れる場合や、大量データの改行を一発で置換処理したい場合等に役に立ちます。改行を表す正規表現はOSによって異なりますので、本記事ではそれぞれの改行の意味合いも含めて解説していきます。
正規表現を知っていると、プログラミングや、簡単なテキスト編集作業の効率がグッと上があり、通常のテキストの置換では時間がかかる作業でも、正規表現を使用することで、驚くほど短時間で検索や置換ができるため是非覚えておきましょう。
– 改行文字には「CR(キャリッジリターン)」「LF(ラインフィールド)」「CRLF」がある
– OSによってデフォルトの改行文字が異なる
– 改行の正規表現は CRでは「\r」、LFでは「\n」、CR+LFでは「\r\n」
正規表現とは
正規表現は、特定の文字列のパターンを、ある記号を使って一つの文字列で表記するための方法です。正規表現では、文字列の種類や位置、繰り返しを「メタ文字」という特殊な記号で表します。メタ文字には、例えば下記のようなものがあります。
- ^:行頭の位置
- $:行末の位置
- \:エスケープ(特殊動作を無効にさせること。)
- *:直前のパターンが0回以上続く
- +:直前のパターンが1回以上続く
行頭の位置を表すメタ文字は「^」なので、「^a」と記述する事でaが先頭に来ることを表現することができます。さらに数字は「[0-9]」または「\d」で表され、「^a\d」と正規表現で記述した場合は、aが先頭でその後に数字が1文字続くことを示します。この場合、a0、a1、a2、a3、a4、a5、a6、a7、a8、a9の全てを「^a\d」という一つの文字列で表現することになります。
改行を表す正規表現
コンピュータ上での改行には「CR(キャリッジリターン)」「LF(ラインフィールド)」「CRLF」といった複数種類の表現が存在し、テキストファイルごとに使用されている改行コードはOSやアプリケーションなどの環境により異なります。これは改行をあらわす正規表現についても同様で、それぞれの改行コードによって正規表現の表記方法も異なります。
Windowsで動作するアプリしか作る必要がない場合はそれほど意識する必要はありませんが、Linuxで動作するサーバー系のプログラムや複数のOSで改行を処理する際は、OS間での改行コードの違いを意識しておきましょう。
それでは、OSごとで標準で使用されている改行コードと正規表現での表現方法を見ていきましょう。
Mac
バージョン9までのMac系OSでの標準の改行コードは「CR(キャリッジリターン)」です。MaxOS Xでは次項のUnixと同様になりますので、そちらを参照ください。CRとは「復帰(カーソルを左端に移す)」を意味し、サクラエディタや秀丸エディタ等のテキストエディタでは「←」と表記されます。CRを正規表現で表すと、「\r」となります。
UNIX
UNIX系のOSやMacOS Xで標準で使われいている改行コードは「LF(ラインフィールド)」です。LFとは「改行(カーソルを次の行に移す)」を意味し、テキストエディタでは「↓」と表記されます。LFを正規表現で表すと、「\n」となります。
Windows
Windows系のOSでは「CR+LF」が標準の改行コードとして使われています。CRLFとはCRとLFの融合形を意味し、テキストエディタでは「↵」と表記されます。カーソルを左端に移して次の行に移すという意味合いがあります。CR+LFを正規表現で表すと、「\r\n」となります。
正規表現には多くの種類があり、複雑な検索を行う場合は、多くの正規表現パターンを組み合わせて使用します。もし独学で詰まってしまった場合は、「ポテパンキャンプ」で現役エンジニアに聞いてみるのもよいでしょう。
こんなときはどうする?
本章では、文字列データから改行を処理する場合等に使う、改行を含む文字列にマッチする正規表現の表記について解説します。
改行を削除したい
プログラムで改行を削除する場合は、正規表現を使って改行を空文字に置換します。前述のように、OSによって改行の正規表現は異なりますので、テキストを生成するOSごとの改行にしたがって置換の対象を検索する必要があります。
サクラエディタ等、正規表現での検索が出来るエディタでテキストを直接置換する場合は、まず取り扱うテキストの改行の種類を確認します。例えば、サクラエディタの場合の確認は下記のようになります。
上の例の場合、Windowsで作られた文章のため、改行マークが「↵」となっています。また、サクラエディタの場合はエディタの下部に「CRLF」のように文字コードが表示されています。
ここでの改行コードはCR+LFですので、置換ツールで置換前を「\r\n」に、置換後を「」(空文字。何も入れない)にして「置換」を押します。サクラエディタの検索や置換で正規表現を使うには、正規表現にチェックを入れます。
上の例の場合、下のように改行が一括削除されます。
改行コードを含む全ての文字列を表現したい
改行コードを含む全ての文字列は、「\s」または「\S」の集合(or)で表すことができます。\sはスペースやタブなどの任意の空白文字を示し、\Sは空白文字以外の任意の文字を示します。
任意の一文字ずつを「or」で表現するには、文字クラスといわれる表記方法により「[]」で囲むことで示すことが出来ます。あるいは、orを示す「|(パイプ)」で任意の文字同士をつなぐことも出来ます。
よって、改行コードを含む全ての文字列は「[\s\S]」または「\s|\S」のように表すことができます。
改行を越えて複数行にまたがる文字列をマッチさせたい
正規表現を扱う言語やツールの中には、改行を超えて複数行にまたがる文字列も検索出来るよう、「シングルラインモード」と「マルチラインモード」の2つのモードを用意している場合があります。2つのモードでは、「.」(改行を除く全て)と「^」(行頭の位置)「$」(行末の位置)の扱いが変わります。
マルチラインモードの場合
- ^:行頭の位置
- $:行末の位置
- .:改行以外の任意の文字
シングルラインモードの場合
- ^:改行を含む文字列全体の先頭の位置
- $:改行を含む文字列全体の末尾の位置
- .:改行を含む任意の文字
サクラエディタでは常にマルチラインモードになっており、改行を超えて複数行にまたがる文字列をマッチさせることは出来ませんが、扱う言語やツールによっては、このモードの切り替え方法が用意されている場合がありますので、確認してみてください。
まとめ
本記事では、OSごとに異なる改行の正規表現と、改行コードの処理を例を交えて解説しました。改行のそれぞれの正規表現は、CRでは「\r」、LFでは「\n」、CR+LFでは「\r\n」になります。改行を正規表現で検索する事で、大量データ中の全ての改行の一発置換や改行をまたいでの検索等を楽に行うことが出来ます。OSによる表現の違いを意識して、間違えた処理をしないように注意しましょう。
未経験で、正規表現を活用した実績的なプログラミングを習得したい場合は、「ポテパンキャンプ」がおすすめです。最短5か月で未経験からプログラマー・エンジニアになれるプログラミングスクールです。