* 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
浮子屋商店もよろしく。

正規表現講座/3 のバックアップ差分(No.2)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:間違いだらけの正規表現講座 level 3

#contents

* 何文字でも入る [#hf529fa5]

さて、第3回です。今回は、「何文字でも入る」伏字のやり方を覚えましょう。~
この表現を覚えると、やっと正規表現っぽい使い方ができるようになります。~
ちょっとややこしいですが、頑張って覚えてください。

* これが何文字でも続く [#ndfde077]

さて、「何文字でも入る」伏字というのは何かというと、イメージとしては、~
「愛天使~きゅん」というような表現で、「~」が果たす役割に似ています。~
「~」の中には、「何でもいいから何文字かの表現」が入る気がしますね。

ただし、コンピュータの正規表現の世界では、これを2つの正規表現の組み合わせで表現します。

さて、今回の最初の正規表現記号です。

 *

この記号。これは、「直前の正規表現の、0回以上の繰り返し」という意味になります。~
ちょっとイメージが掴みにくいと思いますので、実際の使い方を挙げてみましょう。

** 何でもいいから0文字以上 [#s91d3eac]

 .*

正規表現「.」と組み合わせた場合。~
「.」は、「何でもいいから1文字」を表す正規表現でしたね。~
それと「*」を組み合わせると、「何でもいいから1文字が0回以上繰り返し」、~
つまり、「何でもいいから0文字以上続く」という意味になります。

例えば、「けの.*ぴ」という正規表現には、「けのぴ」(0文字)、「けのっぴ」(1文字)
「けのけのけのっぴ」(5文字)の何れもマッチします。

** 数字0文字以上 [#fb0c9c0d]

 [0-9]*

正規表現「[0-9]」と組み合わせた場合。~
「[0-9]」は、「[]の中のどれか一つ」を表す正規表現でしたね。~
つまり、組み合わせると、「0~9の文字が0文字以上続く」という意味になります。

この正規表現には、「0」「8390」といった、数字の連続したものが全てマッチします。~
「」(空文字、数字0文字)もマッチすることに気をつけてください。

** 指定した文字0文字以上 [#ec54e704]

 けの*っぴ

普通の文字と組み合わせることもできます。~
この場合、「*」と組み合わせられているものは、直前にある「の」ですので、~
「けのっぴ」「けののっぴ」「けののののっぴ」といったものがマッチします。~
「けっぴ」もマッチすることに気をつけてください。「の」が0文字、という意味ですね。

* 1文字以上 [#l7bd6bad]

さて、見てきたとおり、「*」は、「0回以上の繰り返し」となっているため、~
使いにくい場合もあります。そのために別の表現も用意されています。

 +

これは、「1回以上の繰り返し」を表します。~
つまり、「けの+っぴ」と書けば、「けのっぴ」はマッチしますが、「けっぴ」は~
マッチしなくなります。

* 0回もしくは1回 [#u9e3fe14]

 ?

これは、「0回もしくは1回の繰り返し」を表します。
つまり、「愛?天使」と書けば、「愛が0回もしくは1回あり、その後に天使が続く」~
「愛天使」と「天使」がヒットします。


* 練習 [#ndaf29ba]

&attachref(,nolink);
&attachref(./regex3.png,nolink);

さて、練習の時間です。

今回は、次のような文字にマッチする正規表現を考えてみてください。

 うはwwwwwwwwおkkkkkwwwwwww

分解すると、

-「うは」が先頭にあり
-その後に1文字以上の「w」が続き
-その後に「お」があり
-その後に1文字以上の「k」が続き
-その後に1文字以上の「w」が続く

正規表現テスターを立ち上げ、適当にうはwwwwおkkkwwwwといった文字列を入れ、~
正規表現でマッチさせてみてください。

正解の一例を以下に示しておきます。

 うはw+おk+w+


* ちょっと脱線 [#h073ecd7]

今回お話した正規表現を使った場合、「どこまでがマッチするか」が微妙な場合が出てきます。~
たとえば、「うはwwおkkkkk」という文字列に対して、正規表現「うは.*k*」を適用したとしましょう。~
この場合、「.*」にマッチするのはどこまでで、「k*」にマッチするのはどこまででしょう?

正規表現の場合、特に指定しない限り、大抵の場合、「最長一致の法則」というものが適用されます。~
この場合で言えば、「.*」にはマッチできる限り最長の部分がマッチしますので、~
実際には、「.*」には「wwおkkkkk」が全てマッチし、その後に残った「k*」には~
空文字がマッチする形になります。

まだそれほど気にしなくてもいいですが、そのうち困ったことが出てくる場合があります。
その際にまた改めて説明します。

* ご指摘などはこちらへ [#z685bbcb]

#comment