0
L= { w is {1,2,3}* 
   | w starts with 3, ends with 2 and there is a substring of only 1 with length 
       even equal or >2}.

したがって、いくつかのテストの結果は次のようになります。

3323112: accepted
311211112: non accepted
31112: non accepted
32: non accepted
2113: non accepted
313212: non accepted

私の答えは:3*(11)*2*

しかし、それはいくつかのテストに失敗します...誰かが私を助けることができますか?

2 番目の演習は次のとおりです。

L= { w is {1,2}* 
   | in w after every 1 there is one or more 2, but if the 1 is the last 
     character it could be the last (no 2 after it)}

テスト文字列:

1: accepted
222:  accepted
221212122:  accepted
1222121:  accepted
111221: not  accepted
11: not  accepted

私の解決策は(12*)*

しかし、いくつかのテストに失敗します...助けてください。

4

3 に答える 3

1

私はあなたのために宿題をするつもりはありませんが、あなたがやろうとしていることに関するいくつかの問題を指摘します:

  • スター自体はワイルドカードではありません。「何にでも合う」という意味ではありません。前のトークンを変更する量指定子です。任意の数の任意の文字を許可する代わりに使用したい。.**
  • も 1 である可能性があるため、式.*(11)*.*は奇数の 1 を持つ文字列にも一致します.。1 の直前と直後の数字は「not-a-1」(つまり 2 または 3) でなければなりません。

うまくいけば、これはあなたを助けるはずです.

于 2011-10-29T12:33:49.047 に答える
1
  • 3 で始まる:^3
  • 2 で終わる:2$
  • 少なくとも 2 つの 1 のシーケンスを含む:1{2,}
  • 結果の正規表現:(^3[1-3]*1{2,}[1-3]*2$そこ[1-3]*には要件がないため、1から3までの任意の数字を許可します)
  • 編集: 1 についての条件を誤解したと思う
    ので、そのパターンは次のとおりです: (?<!1)(1{2})+(?!1)(1 が分離されていることを確認するための後読みと先読み)
  • 改訂されたパターン:^3[1-3]*(?<!1)(1{2})+(?!1)[1-3]*2$

  • すべての 1 の後に少なくとも 1 つの 2 があります: (?<!1)12+(この前に 1 がないことを確認してください)
  • 最後の 1 の後に 2 がない場合があります。1?$
  • 結果:^((?<!1)12+)*1?$

お役に立てれば。正規表現で頑張ってください。習得するのは難しいですが、コツをつかめば簡単です。

于 2011-10-29T12:37:54.803 に答える
1

これは宿題のように思えるので、正直に答えることはしません。正規表現の修飾子を調べる必要があります。*は 0 回以上の繰り返しを示します。また、文字クラス用の+,および角括弧もあります。?また、利用可能なものの中には、使用している正規表現パーサー (しばしば「フレーバー」と呼ばれる) に依存する可能性があることに注意してください。しかし、いくつかの基本は通常同じです。

幸運を!

于 2011-10-29T12:38:34.943 に答える