* 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. |
正規表現講座/5 のバックアップの現在との差分(No.1)メタスケープ!さて、間が空いてしまいましたが、第5回です。さて、講座も多分折り返しくらいでしょうか、第5回です。 今回は、「メタ文字」「エスケープ」「改行の扱い」について覚えましょう。 なお、今回本文中に「\」という文字がいっぱい出てきます。 バックスラッシュに見えている環境が多いと思いますが、 これは日本語環境での、半角の「¥」記号と同じです。 メタ文字今まで、正規表現特有の記号について覚えてきました。 これらはそれぞれ特別な意味を持っていました。 このような、「正規表現で特別な意味をもつ記号」のことを、「メタ文字」と呼びます。
タブ記号の説明は要りませんね。 例えば ほげ\t+へも
と書くと、「『ほげ』があってその直後にタブが1つ以上あって、その後に『へも』がある」 という正規表現になるわけです。 改行記号は説明が必要かもしれません。
そして、\rと\nがそれぞれ 0D と 0A のどちら(或いは両方)を表すのかは、 正規表現をつかうツールによって異なります。 ほとんどの場合、Windowsでは、\r\n もしくは \n で改行を表すことができます。 エスケープさて、正規表現には色々なメタ文字が用意されていますが、その文字自身を表したいときはさて、正規表現には色々なメタ文字が用意されていますが、その文字自身を表したいときは どのようにすれば良いでしょうか。 例えば、「()で囲まれた数字を探す」とき、どのような正規表現を書きますか。 「([0-9]+)」と書いてしまうと、「()」が第4回で学んだ「まとめて1つ」の 意味になってしまいます。 例えば、「()で囲まれた数字を探す」とき、どのような正規表現を書きますか。 ([0-9]+)
と書いてしまうと、「()」が第4回で学んだ「まとめて1つ」の意味になってしまいます。
そのような時に必要なのが、「エスケープ」です。 ほとんどの正規表現ツールでは、メタ文字の前に「\」をつけることによって、 「エスケープ」することができます。 例えば、さっきの例では、「\([0-9]+\)」と書けば望むものが検索できるわけです。 例えば、さっきの例では、 \([0-9]+\)
と書けば望むものが検索できるわけです。「\」自身を検索したいときは、「\\」と書きます。 「\t」という文字列そのもの(タブ記号じゃないですよ)を検索したいときは、 「\t」という文字列そのもの(タブ記号じゃないですよ)を検索したいときは、 「\\t」と書くわけです。 ちなみにこれが、複雑な正規表現が「\」まみれになる理由だったりします。 改行の扱い正規表現を扱うツールには、「シングルラインモード」のON/OFFができる 場合があります。 これ、何が変わるかというと、主に「.」の扱いが変わるのですね。
改行を超えて文字列を検索したい場合など、シングルラインモードをONにすると エディタ等ではほとんどの場合、シングルラインモードはOFFだと思いますが、 改行を超えて文字列を検索したい場合など、シングルラインモードをONにすると 便利な場合もあります。 たとえば、HTMLの中の <a href="~">○○</a> という部分を探したい場合。 <a href="mononoke.html"> もののけ </a>は、「もののけ」の前後の改行文字=「.」に当てはまらない文字、が入っているため、 は、「もののけ」の前後に、改行文字=「.」に当てはまらない文字、が入っているため、 マッチしません。そのような時に「シングルラインモードON」が使えます。 「シングルラインモード」の呼び名はツールによって異なるので、探してみてください。 ちょっと脱線0Dのことをキャリッジリターン(CR)、0Aのことをラインフィード(LF)0Dのことをキャリッジリターン(CR)、0Aのことをラインフィード(LF) と呼んだりします。 これ、いにしえのタイプライタ時代の「改行」の動作、
ご指摘などはこちらへ |