2017-08-28 5 views
-1

すべての文字列の言語のための簡略化された正規表現を見つける必要がある のa、b、およびcのうち、 b。そう、これは単純化することができる場合aがbの直後にない正規表現を見つける

私が何かをしようとした*(A + C)* C(B + C)* +(B + C)*(+ c)はまで

に達したが、この細かく、 ?

ありがとうございます。あなたは否定後読みを探している

+0

プログラミングで使用される正規表現や理論上の正規表現について質問していますか?後者はmath.stackexchange.comに属します。 – Barmar

+0

理論。大丈夫ありがとう。私はそれをmath.stackexchange.comに掲載しました –

+5

私はこの問題を数学的には正規表現であり、math.SEに再掲載されているので、議論の対象外としています。 – Barmar

答えて

0

(?<!a)b 

これはあなたにすぐにa

または負の先読み、次のされていないすべてのbインスタンス見つける:

a(?!b) 

これを直ちにの後に続かないすべてのaインスタンスが見つかります0

ここでは、後読みのためregex101例です。ここで
https://regex101.com/r/RsqXbW/1

は、先読みのためregex101例です。
https://regex101.com/r/qiDIZU/1

0

あなたのソリューションは、任意の言語からの文字列のみが含まれています。しかし、それらのすべてを含んでいるわけではありません。たとえば、acbacは含まれません。基本的な考え方は問題ありませんが、可能な要素を反復できる必要があります。 In:

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

最初の部分はすべての文字列を生成します。

最初のaの後には、何もない、別のaまたはcがあります。もう1つは、同じ3つのオプションを私たちに残します。 cは基本的にゲームを再び開始します。これは、最初の後の部分が形式化するものです。おそらく、さまざまなオプションのすべてで空の文字列を生成するには、many *が必要です。

関連する問題