コンピューター プログラムの出力である正規表現があります。それは次のようなものを持っています
(((2)|(9)))*
人間なら間違いなく次のように書くだろう
[29]*
したがって、正規表現をより読みやすくする単純な変換を行うことができるプログラムが必要です。これまで、私はクイックスクリプトを使用してきました
$r =~ s/\(([0-9])\)/$1/g;
$r =~ s/\(([0-9])\|([0-9])\)/[$1$2]/g;
$r =~ s/\(([0-9]|\[[0-9]+\])\)\*/$1*/g;
$r =~ s/\((\[[0-9]+\]\*)\)/$1/g;
$r =~ s/\|\(([^()]+)\)\|/|$1|/g;
長さを短くしますが、結果にはまだ次のような部分が含まれています
(ba*b)|ba*c|ca*b|ca*c
に単純化する必要があります
[bc]a*[bc]
CPAN を検索したところ、Regexp::List、Regexp::Assemble、および Regexp::Optimizer が見つかりました。最初の 2 つは適用されず、3 番目には問題があります。force install Regexp::Optimizer
まず、テストに合格しないため、cpanを使用しない限り使用できません。第二に、私がそれをしても、表情が窒息します。
注: [regex] に加えて [regular-language] というタグを付けたのは、正規表現が連結、代替、および Kleene スターのみを使用しているためで、実際には規則的です。