まず、言語の英語の説明に翻訳します。
(a U b)*(a U e)b* U (a U b)*(b U e)a*
翻訳:
a
sまたはsの任意のシーケンスb
、オプションの、、a
任意の数のb
sが続きます。
また
任意の数のa
sとb
s、その後に任意のb
数のa
sが続くオプションの
ここには多くの重複があります-少なくとも(a U b)*(a U e)
、 「 sとsの(a U b)*
任意のシーケンス」は必ずまたはイプシロンで終わるため(任意の文字列はイプシロンで終わる可能性があるため)、これらのグループを削除して、a
b
a
(a U b)*b* U (a U b)*a*
翻訳:
a
sまたはsの任意のシーケンスとb
、それに続く任意の数のb
s。
また
任意の数のa
sとb
s、任意の数のsがa
続く
これで、最も外側のグループへの最初のセクションは同じなので、それらを1つにまとめましょう
(a U b)*(a* U b*)
翻訳:
任意のシーケンスのa
sまたはb
sの後に、任意の数のa
sまたは任意の数のsが続きb
ます。
ここで、ちょっと待ってください。「AsとBの任意のシーケンス」は必ずa
「 sの任意のシーケンスまたはsの任意のシーケンス」で終わりますb
。つまり、最初の部分に一致するものはすべて正規表現全体に一致する可能性があります(2番目の部分はゼロの長さ)だから、私たちはそれを作ってみませんか
(a U b)*
タダ。単純。