正規表現による繰り返し

"?", "*", "+"を使えば、繰り返し回数を一文字で指定できる。

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)、およびアンダースコア(_)を含む任意の文字です。


正規表現の繰り返し文字、数値、任意の単語文字

こちらもおすすめ