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

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