トップページに戻る    次の正規表現パズルへ    前の正規表現パズルへ

4-11 指定文字列がn回以上m回以下(重複を許可)

正規表現パズル

文字列aaaの出現回数が3以上5以下の行を検索する。

ただし、以下の方式でaaaの出現回数を数える。
文字列aaaの、aaaの出現回数は1回
文字列aaaaの、aaaの出現回数は2回
文字列aaaaaの、aaaの出現回数は3回
文字列aaaXaaXaaaの、aaaの出現回数は2回
文字列aaaXaaXaaaaの、aaaの出現回数は3回

検索前


検索後


対象データ

aaa
aaaa
aaaaa
aaaXaaaXaaa
aaaXaaXaaaa
XXaaaXaaaXaaaaaa


正規表現

^((?!aaa).)*((?=aaa)a((?!aaa).)*){3,5}((?!aaa).)*$

別解1

^(((?!aaa).)*(?=aaa)a){3,5}((?!aaa).)*$

別解2

^(?=(a(?=aa).*){3})(?!(a(?=aa).*){6}).*$


解説

肯定先読みを使って、重複を許可するようにしてます。

別解2では、以下の連立不等式を使ってます。
Xは3以上の自然数である。かつ、Xは6以上の自然数ではない。 ⇔ X=3,4,5