2011-10-29 37 views
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*

但它沒有一些測試......有人能幫助我嗎?

的第二運動是:

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*)*

但它沒有一些測試......請幫助我。

+0

我懷疑這個問題屬於[cstheory.se] –

+0

爲什麼311211112在第一個練習中被拒絕?它滿足您列出的所有條件(從3開始,以2結尾,並且包含具有偶數長度的1的序列)。 –

回答

1

我不會做你的功課你,但我會指出與你正在嘗試做幾個問題:

  • 自身阿星是不是通配符。這並不意味着「匹配任何東西」。它是一個量詞修改了以前的令牌。您想使用.*而不是*來允許任意數量的任何字符。
  • 表達式.*(11)*.*也匹配奇數個1的字符串,因爲.也可以是1。緊接在1之前和之後的數字必須是「不是1」(即2或3)。

希望這應該對你有幫助。

1
  • 開始以3:^3
  • 用2完:2$
  • 包含至少兩個1的序列:1{2,}
  • 所得的正則表達式:^3[1-3]*1{2,}[1-3]*2$(所述[1-3]*件允許任何數字1到那裏3,因爲那裏沒有要求)
  • 編輯:我想我誤解了關於1s的條件,
    所以模式是:(?<!1)(1{2})+(?!1)(回顧後發和先行確保1S是分離的)
  • 修訂圖案:^3[1-3]*(?<!1)(1{2})+(?!1)[1-3]*2$

  • 每1後至少有一個2:(?<!1)12+(確保沒有1S這一個之前)
  • 最後1可能不具備後2:1?$
  • 結果:^((?<!1)12+)*1?$

希望這會有所幫助。用正則表達式祝你好運,一旦你掌握了它,它們很難學,但很容易。

+0

我可能誤解了1的條件。這是否意味着序列的長度必須是偶數? –

+0

@Kolink這就是我對它的解釋。我認爲它一定是平的,是的。 –

+0

它在問題中說「只有1甚至長度的子串」。 –

1

因爲這看起來像功課我不會給出直接的答案。你會想看看正則表達式中的修飾符。 *表示0次或更多次的重複。字符類也有+,?和方括號。還要注意,有些可用的東西可能依賴於正在使用的正則表達式解析器(通常稱爲「flavor」)。但一些基礎知識通常是相同的。

祝你好運!

相關問題