正規表現による繰り返し
VBAで正規表現 03回
VBAでの正規表現で文字や数字を繰り返す方法
今回は、VBAの正規表現で文字や数字を繰り返す方法を説明します。
最初に文字をみていきましょう。 VBAの正規表現では、文字の繰り返しはメタ文字を使い以下のように表現できます。
* : 直前の文字が0回以上繰り返されることを示します。
たとえば、a*は「aが0回以上繰り返される」を意味します。したがって、「""(空文字)」「a」「aa」「aaa」などはすべてこのパターンに一致します。
+ : 直前の文字が1回以上繰り返されることを示します。
たとえば、a+は「aが1回以上繰り返される」を意味します。したがって、「a」「aa」「aaa」などはこのパターンに一致しますが、「""(空文字)」は一致しません。
{n} : 直前の文字がちょうどn回繰り返されることを示します。
たとえば、a{3}は「aがちょうど3回繰り返される」を意味します。したがって、「aaa」だけがこのパターンに一致します。
{n,} : 直前の文字がn回以上繰り返されることを示します。
たとえば、a{2,}は「aが2回以上繰り返される」を意味します。したがって、「aa」「aaa」などはこのパターンに一致しますが、「a」は一致しません。
{n,m} : 直前の文字がn回以上、m回以下繰り返されることを示します。
たとえば、a{2,3}は「aが2回以上3回以下繰り返される」を意味します。したがって、「aa」「aaa」はこのパターンに一致しますが、「a」「aaaa」は一致しません。
これらのメタ文字は、文字だけでなく、数字や特定の文字クラス(たとえば\d(任意の数字)や\w(任意の単語文字))に対しても使用できます。
たとえば、{n,m} で、直前の文字を\dと数字にします。
\d{2,4} は「数字が2~4回繰り返される」を意味します。
他には ? : 直前の文字があってもなくてもいいときに、つまり0回から1回の繰り返しを意味する時に使われます。
以上が文字の基本的な繰り返しを表すメタ文字の使い方です。
繰り返しを表すメタ文字一覧
表記法 | 意味 | 説明 |
---|---|---|
* | 0回以上繰り返す | a*は「aが0回以上繰り返される」 |
+ | 1回以上繰り返す | a+は「aが1回以上繰り返される」 |
? | 0回から1回の繰り返し | 直前の文字はあってもなくても良い時 |
{n} | n回繰り返す | a{3}は「aがちょうど3回繰り返される」 |
{n,m} | n回~m回繰り返す | a{2,3}は「aが2回以上3回以下繰り返される」 |
{n,} | n回以上繰り返す | a{2,}は「aが2回以上繰り返される」 |
{,m} | 0回からm回まで繰り返す | a{,3}は「aが0回から3回まで繰り返される」 |
おさらい、数値の繰り返し(具体例)
数値の繰り返しを表す正規表現の具体例を挙げます。
数字(たとえば\d(任意の数字))や特定の文字クラス(\w(任意の単語文字))をつかって繰り返す例をあげてみます。
\d* : このパターンは「数字が0回以上繰り返される」を表します。
具体的な一致例は、 ""(空文字)や "123", "4", "56789" などです。
\d+ : このパターンは「数字が1回以上繰り返される」を表します。
具体的な一致例は、 "1", "345", "67890" などです。ただし、""(空文字)は一致しません。
\d{3} : このパターンは「数字がちょうど3回繰り返される」を表します。
具体的な一致例は、 "123", "456", "789" などです。数字2文字だけや数字が4文字の "12", "1234" は一致しません。
\d{2,} : このパターンは「数字が2回以上繰り返される」を表します。
具体的な一致例は、 "12", "3456", "7890" などです。数字1文字だけの "1" は一致しません。
\d{2,4} : このパターンは「数字が2回以上4回以下繰り返される」を表します。
具体的な一致例は、 "12", "345", "6789" などです。 "1", "12345" は一致しません。
これらは、文字列内の部分的な一致を示しています。
全体がこのパターンに一致する場合は、パターンの前後に ^ (先頭)と $ (末尾)を追加して、例えば ^\d{2,4}$ のようにします。これは「全体が2桁以上4桁以下の数字」という意味になります。
数値も文字もOK "\w" (任意の単語文字)の場合
それでは、数値が来てもいいし、文字が来てもいいというような自由なケースの場合はどうでしょうか?
任意の単語文字は、 "\w" で表すことができます。
以下に \w (任意の単語文字)の繰り返しを表す正規表現の具体例を挙げます。
\w はアルファベット、数字、アンダースコア(_)を含む任意の単語文字を表します:
\w* この\w*は「単語文字が0回以上繰り返される」を表します。
具体的な一致例は、 ""(空文字)や "word", "4example", "_underscore" などです。
\w+ この\w+は「単語文字が1回以上繰り返される」を表します。
具体的な一致例は、 "w", "word3", "_underscore" などです。ただし、""(空文字)は一致しません。
\w{3} この\w{3}は「単語文字がちょうど3回繰り返される」を表します。
具体的な一致例は、 "abc", "123", "_w3" などです。2文字だけや4文字の "ab", "1234" は一致しません。
\w{2,} この\w{2,}は「単語文字が2回以上繰り返される」を表します。
具体的な一致例は、 "ab", "word", "12_underscore" などです。 1文字だけの "a" は一致しません。
\w{2,4} この\w{2,4}は「単語文字が2回以上4回以下繰り返される」を表します。
具体的な一致例は、 "ab", "w3rd", "1234" などです。 1文字や5文字の"a", "12345", "words" は一致しません。
これらのパターンも、文字列全体が一致する場合は ^\w{2,4}$ のようにパターンの前後に ^ (先頭)と $ (末尾)を追加します。
繰り返しには、数値だけの繰り返しと文字だけの繰り返しの他に、任意の単語文字の繰り返しという3自由な繰り返しがあるということになります。
「任意の単語文字」の定義は、アルファベット(大文字、小文字)、数字(0から9)、およびアンダースコア(_)を含む任意の文字です。