視覚障害者のための
正規表現入門3



【法則:文字の繰り返し】
話を抽象化するために、やや抽象的な例をあげます。

AAAA

という文字の並びを考えましょう。半角アルファベットAが4つ並んでいます。
前述の「わたし」と同じように、これもこのままで正規表現です。
正規表現「AAAA」は、「A」の次は「A」、その次も「A」、その次も「A」という約束を定めています。
この正規表現は

AAAAA

にはマッチしますが、

AAA

にはマッチしません。
前者はAが5つ並んでいて、4つの並びを包含しますが、後者は3つしか並んでおらず、「A」の次は「A」、その次も「A」、その次も「A」という約束に1個足らないからです。

こうした場合、いくつあるかわからないけれど、Aのいくつかの並びということが表現できれば便利です。そうした表現がひとつあれば、「AAA」にも「AAAA」にも「AAAAA]にもマッチします。

「並び」を「繰り返し」と言い換えましょう。
つまり、Aの何個かの繰り返しです。
これを正規表現では、

A*

あるいは、

A+

と書きます。
半角アスタリスクは、直前の文字(正確には正規表現)の0回以上の繰り返しを意味します。
半角プラスは、直前の文字(正確には正規表現)の1回以上の繰り返しを意味します。
つまり、正規表現「A*」も、正規表現「A+」も、

A
AA
AAA
AAAA
AAAAA
AAAAAA

などにマッチします。
正規表現「A*」の0回以上という意味は、Aという文字があってもなくてもいい、という意味です。
正規表現「A+」の1回以上という意味は、Aという文字が少なくとも1個はなくてはならないという意味です。
だから、正規表現「A+」は、

AAA
bcdAAyz
A

 などの「AAA」、「AA」, 「A」という部分にマッチしますが、

aaaa
bcdXYZ
a

にはマッチしません。なぜなら、aはすべて半角小文字で、半角大文字Aの一回以上の繰り返しという文字の連なり方がないからです。一方正規表現「A*」なら、Aの0回の繰り返しということで、後者だけでなく、どんな文字列にもマッチします。
(大文字小文字を区別しないオプションを設定できる場合もあります。それはまた別の問題です。そうしたオプションを設定したときは「A+」と「a+」は同じなので、マッチが発生します。)


この節の締めくくりとして、正規表現、

AA*

の意味がわかりますか。
前節で説明した「文字の連なりはそのまま正規表現」ということを思い出してください。
これは、正規表現

A+

とまったく同じ意味です。
このことが理解できれば、「文字の連なり方」と「繰り返し」を理解したことになります。


次の項目へ
前の項目へ
正規表現入門の目次ページ
文字主体トップページ







Copyright(C) 2003 Kazuhiro Kito All rights reserved