同じ文字を繰り返す場合の正規表現の記述方法について説明します。
繰り返しを表す正規表現
繰り返しを表す正規表現には、以下のようなものがあります。
正規表現 | 説明 |
* | 0回以上の繰り返しにマッチする |
+ | 1回以上の繰り返しにマッチする |
? | 0回または1回の繰り返しにマッチする |
{n} | n回の繰り返しにマッチする |
{n,} | n回以上の繰り返しにマッチする |
{n, m} | n回以上、m回以下の繰り返しにマッチする |
正規表現では *、+、? などの記号は繰り返しを意味します。たとえば、* は0回以上、+ は1回以上、? は0回または1回直前の文字列が繰り返されている場合にマッチします。
また、任意の1文字を表す . と組み合わせると .*(0回以上の任意の1文字)、.+(1回以上の任意の1文字)のように指定することもできます。
直前の文字列が繰り返す回数を指定したい場合は {} を使用します。{n} はn回の繰り返し、{n,} はn回以上の繰り返し、{n,m} はn回以上m回以下の繰り返しにマッチします。
複数の文字を繰り返す場合
繰り返す文字が1文字ではなく複数の文字列である場合、括弧 () で囲んでグループ化してからマッチングを行います。たとえば、abcという単語を3回繰り返す場合は (abc){3} のよう記述します。
最長一致と最短一致
繰り返しの正規表現を用いる場合、できるだけ長い文字列を得るか(最長一致)できるだけ短い文字列を得るか(最短一致)で検索結果は変わってきます。+ や * のみ記述方法では最長一致でマッチングを行いますが、最短一致にしたい場合はメタ文字の後に ? を追加します。
正規表現 | 一致条件 | 対象文字列 | マッチする文字列 |
a+ | 最長一致 | aaaaa | aaaaa |
a+? | 最短一致 | aaaaa | a |
<.+> | 最長一致 | <title>正規表現</title> | <title>正規表現</title> |
<.+?> | 最短一致 | <title>正規表現</title> | <title>, </title> |
まとめ
文字列の繰り返しを指定する場合は *、+、? などのメタ文字を使用します。また、より詳細なマッチングを行うためにグループ化 () を使った繰り返しの指定なども組み合わせると良いでしょう。