トップページに戻る
次の正規表現パズルへ
前の正規表現パズルへ
4-6 最小マッチ(ものぐさマッチ)を模倣
正規表現パズル
^[ab]+?[bc]
の最小マッチを模倣する
検索前
検索後
対象データ
aaaabbb
abbbbc
bbbbcc
bc
abbaccb
ababbcca
正規表現
^[ab]((?![bc])[ab])*[bc]
別解
^[ab]a*[bc]
解説
対象データによっては、
否定先読みを使って、
最小マッチを模倣できます。
((?![bc])[ab])
に下記のようにブール代数を使うと別解を導くことができます。
_ _ _ _ _ _ _ _
(b*c)*(a+b)=a*b*c+b*b*c = a*b*c
aである、かつ、bでない、cでない。
aである。
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
下記のように最小マッチで正規表現が終了しない場合は、
模倣できないので、ほとんど使い道はなさそうですが
対象データ
aaaabbbXXX
abbbbcXXX
bbbbccXXX
bcXXX
abbaccbXXX
ababbccaXXX
正規表現(模倣できてない例)
^[ab]((?![bc])[ab])*[bc]XXX
^[ab]+?[bc]XXX