0

私は、これらの 2 つの質問に 2 日以上悩まされています。質問の意味を理解しようとしています。私の家庭教師も町の外です。

問題 1: 式によって {a,b} に対して生成されない文字列のみの正規表現を作成します(a+b)****a(a+b)****。あなたの推論を説明してください。

そして、2番目の質問を試しました。これよりも良い答えがあると思いますか?

奇数のas またはちょうど 2 つbの sを含む一連の文字列の正規表現は何ですか?(a((a|b)(a|b))****|bb)私が知っている a の奇数の長さを表すと、RE はa((a|b)(a|b))****

4

5 に答える 5

1

これが最初の質問の始まりです。まず、この正規表現が生成する文字列について考えてみます。

(a+b)*a(a+b)*
  • aANDで始まる必要があります
  • すべての人はその直前にb少なくとも1つ持っている必要がありますそしてa
  • またはが存在する必要があります。aabそうでない場合、文字列はで終わる必要がありますa

これの逆は次のとおりです。

  • aORで始まってはいけません
  • ORbの後にないものが少なくとも1つありますa
  • 文字列は、の繰り返しのみで構成されますab

2番目の質問については、質問を正しく理解したことを確認する必要があります。あなたの解釈は次のようです:

(奇数のaと任意の数のb)または(正確に2つのbとno a)のいずれかを含む文字列のセットの正規表現は何ですか。

しかし、別の解釈はこれです:

(奇数のaと任意の数のb)または(正確に2つのbと任意の数のa)のいずれかを含む文字列のセットの正規表現は何ですか

于 2010-04-20T22:38:51.117 に答える
1

2つを一致aさせるには、次のようなものを使用しますaaか?+これで、は1以上の数量詞であり、*は0以上の数量詞であることがわかりました。したがって、そのパターン全体を繰り返したい場合は、グループに入れて、次のようにパターン全体を繰り返すことができます(aa)+

それは一致します:

  • aa
  • aaaa

だがしかし:

  • aaa少なくとも2つのアイテムが必要なため) `
  • aaaaa最初の2つと一致するためですが、余分なものがありますa

そして、その奇数を偶数にしたい場合は、a次のようにグループの外に1つ追加するだけですa(aa)+。ただし、特定の最小値のない奇数の量+が必要だったため、少なくとも3a秒必要になるため使用しないでください。

したがって、全体の答えは次のようになります。(bb|a(aa)*)

于 2010-04-20T22:38:58.347 に答える
0

この式は、RE の式に少なくとも 1 つの「A」が含まれている必要があることを意味します。

この表現は受け入れられません

'b' 'b'* または空のセット

于 2010-05-02T07:31:38.547 に答える
0

最初の質問は、提供された正規表現と一致しない一連の文字列の正規表現を書くように求めているようです。

たとえば、{a} を超えて一致しない文字列のセットの正規表現を求める質問があったとします。aa+一致する文字列は次のとおりです。

  • 「ああ」
  • 「あああ」
  • 「あああああ」

一致しない文字列は何ですか? 次の 2 つだけです。

  • ''
  • 「あ」

後者のセットの正規表現はa?.

2 番目の質問については、肯定的なテスト ケースと否定的なテスト ケースを用意することをお勧めします。正規表現を介して次のような文字列を実行し、何が起こるかを確認します。

  • 'a' (パスする必要があります)
  • 'aaa' (パスする必要があります)
  • 'bb' (パスする必要があります)
  • '' (失敗するはずです)
  • 'aa' (失敗するはずです)
  • 'aba' (失敗するはずです)

幸運を!

于 2010-04-20T22:41:57.397 に答える
0

この式は、文字列内に必要であることを(a+b)*a(a+b)*意味します。この式で生成できない文字列は次のとおりです。ab*

于 2010-04-20T22:42:26.110 に答える