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

4-9 複数文字列がn回以上m回以下

正規表現パズル

文字列abcの出現回数が3以上5以下、かつ、
文字列defの出現回数が4以上6以下の行を検索する。

検索前


検索後


対象データ

abcdef
abcXdefXabc
XabcXabcXabcdef
abcabcabcabcdefdefdefdef
abcXabcXabcXabcXdefXdefXdefdef
abcdefabcabcabcdefabcdefdef
abcdefabcabcabcdefabcdefXdefX


正規表現

^(?=((?!abc).)*(abc((?!abc).)*){3,5}((?!abc).)*$)
 (?=((?!def).)*(def((?!def).)*){4,6}((?!def).)*$).*$

別解1

^(?=(((?!abc).)*abc){3,5}((?!abc).)*$)
 (?=(((?!def).)*def){4,6}((?!def).)*$).*$

別解2

^(?=(.*abc){3})(?!(.*abc){6})(?=(.*def){4})(?!(.*def){7}).*$


解説

否定先読みと肯定先読みを組み合わせてます。

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