正規言語を記述する正規表現Rが与えられます (派手な後方参照はありません)。Rで記述されたものを除くすべての単語の言語を記述する正規表現R*を構築するアルゴリズム的な方法はありますか? ウィキペディアが言うように、それは可能であるはずです:
正規言語は、さまざまな操作の下で閉じられます。つまり、言語KとLが正規である場合、次の操作の結果も同様です: […] 補数¬L
たとえば、アルファベット{a,b,c} が与えられた場合、言語(abc*)+の逆は(a|(ac|b|c).*)?
DPenner がコメントで既に指摘しているように、正規表現の逆数は元の表現より指数関数的に大きくなる可能性があります。これにより、正規表現の反転は、検索目的で否定的な部分式構文を実装するのに適していません。正規表現マッチングのO(n*m)ランタイム特性 ( nは正規表現のサイズ、mは入力の長さ) を保持し、部分式の否定を許可するアルゴリズムはありますか?