左分配法則により、この正規表現は次のようになります。A(B + C)
次のように書くことができます:AB + AC
次は私の質問です。この例では、左分配法則を使用できますか:A(B + C *)
私が得ることができるように:AB + A(C *)
または、次のようなものがありますか:AB + AC *
ありがとう
左分配法則により、この正規表現は次のようになります。A(B + C)
次のように書くことができます:AB + AC
次は私の質問です。この例では、左分配法則を使用できますか:A(B + C *)
私が得ることができるように:AB + A(C *)
または、次のようなものがありますか:AB + AC *
ありがとう
AB + A(C*)間違いなく正しいです(そしてAB + AC*、の優先順位によっては、ほぼ確実に正しいです*)。
問題の正規表現はA ( B + C* )⇔A ( B + (C*) )です。c=を置換として使用するC*と、元の正規表現をとして記述A ( B + c )できます。これで、左分配法則を使用できることは明らかです。すべての手順を一度に実行します。
A ( B + C* ) <=> A ( B + (C*) ) <=> AB + A(C*) <=> AB + AC*
(ここでは、教訓的な目的のために、必要以上の作業があります。私は<=>「と同等」を意味するために使用しています。)
問題の正規表現が一致するものを確認することもできます(これは証明ではありませんが、同等であることを示す良いデモンストレーションです)。
A(B + C*)一致の後に、A単一Bまたは任意の数のセグメント、、、、、C..が続きます。ABAACACCACCCAB + A(C*)ABいずれかに一致するか、その後に任意のA数のセグメントC、、、、、..が続きます。ABAACACCACCCそして、それらはまったく同じものです。
私の知る限り、はとA(B+C*)同じではありませんAB + A(C*)。最初の式はABBBBBBBBBBBBBまたはABBBBBBBBBBBBCのような文字列と一致します2番目の式はABBBBBBBBBBBBAまたはABBBBBBBBBBBACCCCCCCCCCCのような文字列と一致します
AB + A(C *)これは正しいので
C *は0以上を意味します(uには0またはCの倍数があります)C +は1以上を意味します(少なくとも1つのcまたは複数)