こんにちは、さち です。
普段、テキストの編集は「Notepad++」を使っています。
複数カーソル(マルチエディット)など様々な便利機能がある上
起動も超速いという最強のテキストエディターです。
(もともとは、プログラマー向けのエディターらしい)
先日、その Notepad++ の「検索」で「正規表現」を使っていた時に
複数行になっている文字列を検索したいことがありました。
普通に、任意の1文字を表す「.(ドット)」を使えばいけるかと思ったら
「改行」は含んでくれないみたいです……。
正規表現の「.(ドット)」は改行を含んでくれない
- 2行になっている文字列「ラブライブ!サンシャイン!!」があります。
正規表現的に書けば「ラブライブ!\nサンシャイン!!」でしょうか。
- 「Ctrl + F」キーを押して、「検索」を開きます。
- 「正規表現」で検索をします。
- 下図のように、「イブ」から「イン」までが検索されるような正規表現は……
- 「イブ.*イン」で良いですね。
いざ、検索すると……
- 「見つからない」と表示されてしまいました。
正規表現の「.(ドット)」は任意の1文字を表すメタ文字ですが
「\n」などの「改行」は含まないので、こういう結果になったわけです。
「.(ドット)」に改行も含める方法
- 「Ctrl + F」キーで「検索」を開きます。
- 「正規表現」を選択。
- さらに、その右にある「. は改行と一致」にチェックを入れます。
- 先ほどと同じ「イブ.*イン」で検索。
- 「見つかった」と表示されました。
- ちゃんと、「イブ!サンシャイン」が選択されています。
「.(ドット)」が「改行(\nなど)」も含むようになったからですね。
ちなみに、プログラミング言語によっては
この機能が「シングルラインモード」として用意されていることがあります。
修飾子(フラグ)で変更できます(通常は「s」)。
ちなみに、私がよく使う JavaScript にはありません。悲しいです。
おまけ - 改行コード「LF」「CR」の話
人間から見ると「改行」は改行以外の何ものでもないですが
PC にとっての改行は次の3種類があります。
OS ごとに違うんです。ややこしいですよね。
そのせいで、Mac で書いたテキストを Windows の「メモ帳」で開くと
改行が正しく表示されないなんてことがありました。
(Windodws 10 のバージョン「1809」でやっと改善された)
「CR」は、旧バージョンの Mac で使われていたものなので
現在は、ほぼ絶滅したと考えて問題ありません。
じゃあ、「改行コード」に書かれている「LF」と「CR」って何でしょう?
実はこの2つ、タイプライターで使われていた用語なんです。
結局、PC の「LF」と「CR」の違いって何!?
タイプライターでは、「LF」と「CR」は違う意味のものでしたが
ぶっちゃけ、PC では違いなんて気にしなくていいです。
(タイプライターの動作を考えれば、正確なのは Windows ではあるけど)
「LF」「CR」、名前は違うけれど、どっちも「改行」を意味するもの。
「改行」の記述ルールが OS ごとに違う。
そういう認識で大丈夫です。
ちなみに、私が使用しているテキストエディター「Notepad++」では
下部のステータスバーに、そのファイルの改行コードが表示されていて
ダブルクリックで、いつでも変換できます。
「改行」を見えるようにできるテキストエディターでは
タイプライターでの意味を反映して次のようなマークになっている場合があります。
- 「LF」は、行(紙)を送るので「↓」
- 「CR」は、行頭に戻るので「←」
- 「CRLF」は、両方を組み合わせて「↵」
この仕様なら、タイプライターの「LF」「CR」の意味を知っていれば
改行マークを見るだけで、どの「改行コード」なのかすぐ分かりますね。
正規表現で、「改行」を探すには
「\n」「\r」「\r\n」の3種類に対応できる記述が必要ですが
この3種類すべてをまかなえる「\R」を使える場合もあります。
知っていると非常に便利です。
Notepad++ は「\R」を使えます。
改行コードのことで悩まずに済むので、積極的に使っていきましょう。
コメント