* U K I Y A H O N P O *
Nel mezzo del cammin di nostra vita mi ritrovai per una selva oscura,
che la diritta via era smarrita.
リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
浮子屋商店もよろしく。

間違いだらけの正規表現講座 level 5

Table of Contents

メタスケープ!

さて、講座も多分折り返しくらいでしょうか、第5回です。
今回は、「メタ文字」「エスケープ」「改行の扱い」について覚えましょう。

なお、今回本文中に「\」という文字がいっぱい出てきます。
バックスラッシュに見えている環境が多いと思いますが、 これは日本語環境での、半角の「¥」記号と同じです。

メタ文字

今まで、正規表現特有の記号について覚えてきました。
たとえば、「*」、「+」、「()」などです。
これらはそれぞれ特別な意味を持っていました。

このような、「正規表現で特別な意味をもつ記号」のことを、「メタ文字」と呼びます。
メタ文字には、今まで紹介したものの他に、次のようなものもあります。

\tタブ記号1文字をあらわす。
\n改行記号1文字をあらわす。0A(文字コード、16進数で10)を表すことが多い。
\r改行記号1文字をあらわす。0D(文字コード、16進数で13)を表すことが多い。
\xnn文字コードが16進数でnnの1文字をあらわす。

タブ記号の説明は要りませんね。
例えば

ほげ\t+へも

と書くと、
「『ほげ』があってその直後にタブが1つ以上あって、その後に『へも』がある」
という正規表現になるわけです。

改行記号は説明が必要かもしれません。
OSによって改行を表す文字コードが異なるため、このように二つのメタ文字があります。

  • Windowsでは文字コード 0D 0A の2文字で1つの改行を表します。
  • UNIXでは文字コード 0A の1文字で1つの改行を表します。
  • Macでは文字コード 0D の1文字で1つの改行を表します。

そして、\rと\nがそれぞれ 0D と 0A のどちら(或いは両方)を表すのかは、 正規表現をつかうツールによって異なります。
ほとんどの場合、Windowsでは、\r\n もしくは \n で改行を表すことができます。

エスケープ

さて、正規表現には色々なメタ文字が用意されていますが、その文字自身を表したいときは どのようにすれば良いでしょうか。

例えば、「()で囲まれた数字を探す」とき、どのような正規表現を書きますか。

([0-9]+)

と書いてしまうと、「()」が第4回で学んだ「まとめて1つ」の意味になってしまいます。

そのような時に必要なのが、「エスケープ」です。
「エスケープ」は、「メタ文字を普通の文字とする」意味があります。

ほとんどの正規表現ツールでは、メタ文字の前に「\」をつけることによって、 「エスケープ」することができます。

例えば、さっきの例では、

\([0-9]+\)

と書けば望むものが検索できるわけです。
「\」自身を検索したいときは、「\\」と書きます。
「\t」という文字列そのもの(タブ記号じゃないですよ)を検索したいときは、 「\\t」と書くわけです。

ちなみにこれが、複雑な正規表現が「\」まみれになる理由だったりします。

改行の扱い

正規表現を扱うツールには、「シングルラインモード」のON/OFFができる 場合があります。

これ、何が変わるかというと、主に「.」の扱いが変わるのですね。

  • シングルラインモードONでは、「.」は改行コード(\rや\n)にもマッチします。
  • シングルラインモードOFFでは、「.」は改行コードにマッチしません。

エディタ等ではほとんどの場合、シングルラインモードはOFFだと思いますが、 改行を超えて文字列を検索したい場合など、シングルラインモードをONにすると 便利な場合もあります。

たとえば、HTMLの中の <a href="~">○○</a> という部分を探したい場合。
シングルラインモードOFFで、普通に「<a href=".*">.*</a>」と書いてしまうと、

<a href="mononoke.html">
もののけ
</a>

は、「もののけ」の前後に、改行文字=「.」に当てはまらない文字、が入っているため、 マッチしません。そのような時に「シングルラインモードON」が使えます。
「シングルラインモード」の呼び名はツールによって異なるので、探してみてください。

ちょっと脱線

0Dのことをキャリッジリターン(CR)、0Aのことをラインフィード(LF) と呼んだりします。

これ、いにしえのタイプライタ時代の「改行」の動作、

  • 文字を打つヘッダ(キャリッジ)を左に戻す=キャリッジリターン
  • 紙を1行分下に送る=ラインフィード

から来ているらしいですが、キーボード配列のQWERTYなど、 コンピュータって、変なところで昔の慣習を引きずっているものです。

ご指摘などはこちらへ


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

このページの最終更新日: 2006/09/01 05:23:02 JST (3892d)
このページのトラックバックURL: http://ukiya.sakura.ne.jp/index.php?tb_id=c7d4beeb010c0d5f49e945114e29d9cd