トップページに戻る
次の正規表現パズルへ
前の正規表現パズルへ
5-20 正規表現でブール代数の公式
正規表現パズル
正規表現とブール代数の公式についての考察です。
補元法則その1
_
A+A = 1
(?=A)|(?!A) は、全ての位置にマッチ
補元法則その2
_
A*A = 0
(?=A)(?!A) は、どの位置にもマッチしない
交換法則その1
A+B = B+A
(?=A)|(?=B) と
(?=B)|(?=A) は、同値である。
下記のような、肯定先読みでの、括弧と\1や\2などの組み合わせは考慮してません。(他の法則も同様)
(?=(X+))|(?=(Y+)\1)
(?=(Y+)\1)|(?=(X+))
交換法則その2
A*B = B*A
(?=A)(?=B) と
(?=B)(?=A) は、同値である。
分配法則その1
A*(B+C) = A*B + A*C
(?=A)((?=B)|(?=C)) と
(?=A)(?=B)|(?=A)(?=C) は、同値である。
分配法則その2
(A+B) * (A+C) = A + B*C
((?=A)|(?=B))((?=A)|(?=C)) と
(?=A)|(?=B)(?=C) は、同値である。
ドモルガンの法則その1
___ _ _
A+B = A*B
(?!(?=A)|(?=B)) と
(?!A)(?!B) は、同値である。
正規表現でブール代数を使う時は、
全体の否定を使わないほうが可読性が高いようです。
ドモルガンの法則その2
___ _ _
A*B = A+B
(?!(?=A)(?=B)) と
(?!A)|(?!B) は、同値である。
吸収法則その1
A+ A*B = A
(?=A)|(?=A)(?=B) と
(?=A) は、同値である。
吸収法則その2
A* (A+B) = A
(?=A)((?=A)|(?=B)) と
(?=A) は、同値である。
回帰法則(二重否定)
=
A = A
(?!(?!A)) と
(?=A) は、同値である。
便利な公式
_
A + A*B = A+B
(?=A)|(?!A)(?=B) と
(?=A)|(?=B) は、同値である。