1

以下で構成される言語の正規表現を作成しようとしています。

  • 任意の数の a の後に 1 つの b と
  • 任意の数の a の後に 1 つの b が続き、その後に偶数の a が続く文字列。

と思い(b | ((a^+)b)^* ) U (a | ( (b^+) a)* )ましたが違いました。

どこが間違っているか知っている人はいますか?

4

1 に答える 1

2

予測

"strings that consist of"ではなく、である必要があると思います"strings which contains"。違いはbbbbbaaabaabbbb、有効な文字列である場合"contains"(が含まれているためaaabaa)です。

それを作るため"strings that contains"に、唯一の違いは.*?最初と.*最後に追加することです(またはあなたがそれを[ab]*?とに[ab]*制限したい場合)。ab

問題分析

"strings that consist of any number of a's followed by a single b followed by an even number of a's"0は偶数なので、問題を単純化できると思います。

私はあなたの正規表現で何をしているの^か、何をしているのかわかりません。Uこの言語固有の構文(通常^は行/文字列の開始を示します)ですか?

解決

それは次のように単純でなければなりません:

a*b(aa)*

a*-任意の数の
ba-単一のb
(aa)*偶数のa

編集:

コメントによると、次のような文字列で構成される文字列が必要になる場合があります。

  • 任意の数の
  • 次の任意の数が続きます:
    • シングルb
    • 偶数のaが続きます(数値!= 0)
  • オプションでabが続く

正規表現は次のようになります。

a*(b(aa)+)*b?
于 2013-03-16T14:37:11.317 に答える