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