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

Source of 正規表現講座/2

TITLE:間違いだらけの正規表現講座 level 2

#contentsx

* 入るものを特定する [#u48c4f4c]

さて、第2回では、「入るものを特定する」伏字のやり方について解説します。~

前回は、正規表現「.」は、なんでもいいから1文字とマッチする、とお話しました。~
「マッチ」とは「当てはまる」という意味でしたね。


しかし「なんでもいい」では困る場合もあります。

例えば、テキストファイルから 2006/07/07 のような日付を探す場合。~
これを、「..../../..」という正規表現で探してしまうと、
「test/ab/cd」のような要らないものまでマッチしてしまいます。

そこで、今回は「数字だけが入る伏字」や「特定の文字だけが入る伏字」についてお話します。

* この中のどれか一つ [#yaa871cb]

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

 [abcde]

この記号。これは、「[]の中のどれか一つにマッチする」正規表現です。~
この例であれば、「aかbかcかdかeかにマッチする」という意味になります。~
「[」と「]」は半角で書いてください。

さて、これで先ほどの年月日を探す例を書き直してみましょう。

 [0123456789][0123456789][0123456789][0123456789]/
 [0123456789][0123456789]/[0123456789][0123456789]

単純ですね。

「0123456789のどれかが入る伏字」を使って、????/??/?? の ? に入るものを、
数字に限定しているわけです。

* こっからここまで全部くれ! [#j729e9c2]

しかし、「数字」を表すために毎回 [0123456789] と書いていたのでは疲れてしまいます。~
そこで、次のような省略記法が用意されています。

 [0-9]

これは、「0から9までのどれかにマッチする」正規表現です。~
先ほどの例をこの記法で書き直すと、

 [0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]

となります。ずっと短くなりました。

この記法は、勿論数字以外にも使えます。例えば;

 [a-z] これはアルファベット小文字にマッチします。
 [A-Z] これはアルファベット大文字にマッチします。

組み合わせて使うこともできます。

 [0-9a-zA-Z] これはアルファベット大文字、小文字、数字にマッチします。

* これ以外全部くれ! [#eed0e516]

さて、ついでに、次の記法も覚えておきましょう。

 [^abc]

これは、「aとbとc以外の任意の1文字」にマッチする表現です。~
「[]」の先頭に「^」が入ると、「~以外の」という意味になります。

例えば、

 [^A-Z]

これは、「大文字アルファベット以外の任意の1文字」にマッチする表現です。

今はそれほど使い道が思いつかないかもしれませんが、そのうち使いたい場面が出てくるので、
一緒に覚えておいてください。


* 練習 [#t5136122]

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

さて、練習の時間です。

正規表現テスターを立ち上げてください。~
今回は大文字小文字を区別したいので、右側のオプションは「大文字と小文字を区別しない」を外します。

そうしたら、適当なサイトからテキストを貼り付けてみてください。~
例では、読売新聞のトップ(http://www.yomiuri.co.jp/)を貼り付けてみました。

その中から、12:34 という形式の時刻表記を探してみます。~
それを表す正規表現は、もう、わかりますね。

 [0-9][0-9]:[0-9][0-9]

これを正規表現の欄に入れて、「テスト!」ボタンを押してみましょう。


* ちょっと脱線 [#f823e4bd]

今回お話したような正規表現は、「文字クラス」と呼ばれています。

「クラス」というのはコンピュータ用語で沢山出てきますが、
日本人だと、一番に来るイメージは、学校のクラス、ではないでしょうか。

次に来るのは、「Aクラス」「Bクラス」といった、「等級」という意味かな。

どうしてもそんなイメージがあってどうも馴染みにくい気がします。


コンピュータ用語の「クラス」はもうちょっと広い意味で使われており、~
非常に大雑把に言ってしまうと、「ひとまとまり」というような意味です。

つまり、「文字クラス」であれば、「文字のひとまとまり」。~
今回の正規表現は、まさに「文字のひとまとまり」の中からどれかを選ぶ表現だったわけです。

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

#comment