1

次の正規表現を言葉で表現しようとしています。これは、私が行っている CS の作業とは対照的に、プログラミングの正規表現ではないことに注意してください。正規表現は次のとおりです。

(ab + b)* + (ba + b)*

スペースは意味がなく、'+' は 'or' として機能します。今の私の答えは:

「この正規表現は、部分文字列 'aa' を含まず、最初の文字が 'a' の場合、最後の文字が 'b' であるすべての文字列を表します」

これは正しいです?もしそうなら、私が置いた最後の条件は私を少し疲れさせます. おそらく合計を単純化する方法はありますか?

みんなありがとう。

4

2 に答える 2

2

うーん、@ChristianTernusの削減に同意するかどうかはわかりません。

これらが暗黙的に固定されていると仮定すると、元の(ab|b)*|(ba|b)*英語の は次のようになります。

  1. and 、またはで完全に構成される文字列abb
  2. だけで構成される文字列。bab

したがって、たとえば、abbは第 1 種にbbaは一致しますが第 2 種には一致しません。また、第 2 種には一致しますが第 1 種には一致しません。

その間、どのように還元abbともbba一致しないかに注意してください(ab)*|(ba)*|(b)*。これは実際には、

  1. 、またはで完全に構成される文字列ab
  2. 、またはで完全に構成される文字列ba
  3. で完全に構成された文字列b

実際、あなたがそれを英語化した方法は、すでに最高だったと思います! ただし、次のようにスタイルします。

この正規表現は、完全に 'a' と 'b' で構成され、連続する 'a' がなく、最初の文字が 'a' の場合に最後の文字が 'b' である文字列を表します。

あなたがすでに書いたものとほぼ同じです。


@ChristianTernus (および @slebetman) が指摘するように、上記は、元の式が null 文字列 (または、私の英語化からは明らかではない「a」のない文字列でさえも) を受け入れることを考慮していないため、実際には私は信じていますOPの英語化は確かに最強でした。

于 2013-10-23T03:05:09.953 に答える