3

language を表す正規表現を見つける必要があります{w in {a,b,c}* | neither bc nor cb is part of w}

私は次のように考えました: bc も cb も正規表現の一部ではないため、b のシーケンスの後に c のシーケンスが続く場合、またはその逆の場合は、c のシーケンスの前に少なくとも 1 つの「a」が必要です。これが私が次の解決策を思いついた方法です:

(a+b)* | (a+c)* | (a+b)*a(a+c)* | ((a+b)*a(a+c)*a)* | (a+c)*a(a+b)* | ((a+c)*a(a+b)*a)*

私の解決策の正しさについて確信が持てないので、ここでそれが機能するかどうかを尋ねることを考えました。これとは別に、対応する正規表現を見つける数学的な方法はありますか? 私の解決策は直感だけに基づいているからです。

前もって感謝します。

4

2 に答える 2

4

これは単純化できると思います。

s のいずれかa、またはbs の後にaorbまたは nothingが続くか、または s の後にor or Nothingcが続く場合があります。ac

^(a|b([ab]|$)|(c[ac]|$))*$

先読みアサーションを使用すると、より簡単になります。

^(a|b(?!c)|c(?!b))*$
于 2013-11-10T21:41:26.053 に答える