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

2-2 指定文字列を含まない行を検索

正規表現パズル

abを含まない、かつ、bcを含まない、かつ、cdを含む行を検索する。

検索前


検索後


対象データ

abcdefg
acbdefg
ab
bc
cd
cdxxabxxbc
abcd
cdab
axbxcdxxx


正規表現

^(?!.*ab)(?!.*bc)(?=.*cd).*$

別解

^(?!(?=.*(ab|bc)))(?=.*cd).*$


解説

肯定先読みと否定先読みを組み合わせて、
論理演算を行ってます

別解では、
abを含むことをA
bcを含むことをB
cdを含むことをC
とおいて、
ドモルガンの法則を使って
_ _    ___
A*B*C=(A+B)*C
というブール代数の同値変形を行ってます。

双対の原理を使って
_ _
A*B = 1 ⇔
A+B = 0 ⇔
___
A+B = 1

と変形してもいいですけどね。

正規表現の問題集1 (基本編)

ド・モルガンの法則 とは