a,b,cから成る正規表現で、いずれの文字も3個以上続かないものはどのように表されますか。否定記号は使わないでください。

1件の回答

回答を書く

1002219

2026-01-03 09:50

+ フォロー

該当の正規表現そのものを示すことはできませんが、作り方を示すことはできます。

まず「a,b,cからなり、いずれの文字も3文字続かないもの」の補集合、つまり「a,b,c以外の文字があるか、あるいはa,b,cのどれかが3文字以上続くもの」は基本正規表現で

^.*([def…0123…]|aaa|bbb|ccc).*$

で書けます。[]内はa,b,c以外の全ての文字を並べます(否定を使ってよければ[^abc]でいいんですが)。

次に、基本正規表現からDFAに直すアルゴリズムと、DFAから基本正規表現に直すアルゴリズムはあるので、上記の正規表現をまずDFAに直し、次にそのDFAの受理状態と非受理状態を入れ替えます。これで「a,b,cからなり、いずれの文字も3文字続かないもの」の補集合の補集合、つまり「a,b,cからなり、いずれの文字も3文字続かないもの」を受理するDFAができるので、それを正規表現に直せば出来上がりです。

否定を使ってもよければ、Perlなどで使われる拡張正規表現で

^(a(?!aa)|b(?!bb)|c(?!cc))*$

でいけるんですが、否定を使うなということなので、こういう解法しかなくなります。

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有