* 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. |
正規表現講座/3 のバックアップの現在との差分(No.2)何文字でも入るさて、第3回です。今回は、「何文字でも入る」伏字のやり方を覚えましょう。 これが何文字でも続くさて、「何文字でも入る」伏字というのは何かというと、イメージとしては、さて、「何文字でも入る」伏字というのは何かというと、イメージとしては、 「愛天使~きゅん」というような表現で、「~」が果たす役割に似ています。 「~」の中には、「何でもいいから何文字かの表現」が入る気がしますね。 ただし、コンピュータの正規表現の世界では、これを2つの正規表現の組み合わせで表現します。 さて、今回の最初の正規表現記号です。 * この記号。これは、「直前の正規表現の、0回以上の繰り返し」という意味になります。 何でもいいから0文字以上.* 正規表現「.」と組み合わせた場合。 それと「*」を組み合わせると、「何でもいいから1文字が0回以上繰り返し」、 つまり、「何でもいいから0文字以上続く」という意味になります。 例えば、「けの.*ぴ」という正規表現には、「けのぴ」(0文字)、「けのっぴ」(1文字) 「けのけのけのっぴ」(5文字)の何れもマッチします。 数字0文字以上[0-9]* 正規表現「[0-9]」と組み合わせた場合。 この正規表現には、「0」「8390」といった、数字の連続したものが全てマッチします。 指定した文字0文字以上けの*っぴ 普通の文字と組み合わせることもできます。 この場合、「*」と組み合わせられているものは、直前にある「の」ですので、 「けのっぴ」「けののっぴ」「けののののっぴ」といったものがマッチします。 「けっぴ」もマッチすることに気をつけてください。「の」が0文字、という意味ですね。 1文字以上さて、見てきたとおり、「*」は、「0回以上の繰り返し」となっているため、 + これは、「1回以上の繰り返し」を表します。 つまり、「けの+っぴ」と書けば、「けのっぴ」はマッチしますが、「けっぴ」は マッチしなくなります。 0回もしくは1回?これは、「0回もしくは1回の繰り返し」を表します。 これは、「0回もしくは1回の繰り返し」を表します。 つまり、「愛?天使」と書けば、「愛が0回もしくは1回あり、その後に天使が続く」 「愛天使」と「天使」がヒットします。 =「愛天使」と「天使」がヒットします。 練習さて、練習の時間です。 今回は、次のような文字にマッチする正規表現を考えてみてください。 うはwwwwwwwwおkkkkkwwwwwww 分解すると、
正規表現でマッチさせてみてください。 正規表現テスターを立ち上げ、適当にうはwwwwおkkkwwwwといった 文字列を入れ、正規表現でマッチさせてみてください。 正解の一例を以下に示しておきます。 うはw+おk+w+ ちょっと脱線最長一致!今回お話した正規表現を使った場合、「どこまでがマッチするか」が微妙な場合が出てきます。 正規表現の場合、特に指定しない限り、大抵の場合、「最長一致の法則」というものが適用されます。 実際には、「.*」には「wwおkkkkk」が全てマッチし、その後に残った「k*」には 空文字がマッチする形になります。 この場合で言えば、「.*」にはマッチできる限り最長の部分がマッチしますので、 実際には、「.*」には「wwおkkkkk」が全てマッチし、 その後に残った「k*」には空文字がマッチする形になります。 まだそれほど気にしなくてもいいですが、そのうち困ったことが出てくる場合があります。 まだそれほど気にしなくてもいいですが、そのうち困ったことが出てくる場合があります。 その際にまた改めて説明します。 ちょっと脱線今回お話した「*」や「?」は、「量指定子」などと呼ばれています。正規表現がマッチする「量」を指定するからでしょうか。 ご指摘などはこちらへ |