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

3-19 指定文字列がn回以外

正規表現パズル

文字列abcの数が3個でない行を検索する

検索前


検索後


対象データ

XXXXX
abcXX
abcXabc
abcabcXXXabcX
abcabcXXXabcXabc
abcabcabc


正規表現

^(?!((((?!abc).)*abc((?!abc).)*){3}$)).*$

別解1

^(?!((((?!abc).)*abc){3}((?!abc).)*$)).*$

別解2

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


解説

否定先読みを、二重で使ってます。

別解2では、以下の連立不等式を使ってます。
Xは3以上の自然数である。かつ、Xは4以上の自然数ではない。 ⇔ X=3
両方を否定して、
(Xは3以上の自然数である。かつ、Xは4以上の自然数ではない。) ということはない ⇔ X!=3

P ⇔ Q
が成立するなら、両方を否定した下記の命題も成立するのです。
Not(P) ⇔ Not(Q)