2013-05-06 60 views
1

我實在不明白在這裏表達的差異。任何非空字符串 - 正則語言

在所有任何字符串,然後有:任何非空字符串

字母Σ

{a, b, c} 

我明白,(a+b+c)*可以是a, b, c

但什麼區別只是另一個(a+b+c)使?

enter image description here

這些答案都採取了一些演講幻燈片。

有人可以請解釋爲什麼我們需要另一個(a+b+c)

謝謝!

+0

你知道「空字符串」是什麼意思嗎? – 2013-05-06 13:58:14

+0

我這樣做,但我仍然不明白爲什麼我們需要兩個(A + B + C) – PaulEx10 2013-05-06 13:59:25

回答

1

的字符串可以爲空,如果它僅僅是「」。這是一個字符串的有效值,因此它將成爲「任何字符串」類別的一部分。

+0

據我所知,第一個,但它是第二個我不太明白。爲什麼我們使用兩個:(a + b + c) - 我們不能只用一個嗎? – PaulEx10 2013-05-06 14:00:00

3

記住,星號表示零個或多個。所以第一個例子可能會導致一個空白字符串。但是,第二個字符串必須以a,b或c之一開始,然後可能爲零個或多個其他字符,因此它至少有一個字符長度。

+0

星號不會干擾兩者(最後?),並且我認爲星號就像一個循環?因此,如果需要的話會出現很多事件? – PaulEx10 2013-05-06 14:01:44

+1

星號僅適用於緊接其前面的術語。如果它需要適用於多個術語,它們將被包裹在某種形式的括號中(我相信你在前面的例子中已經看到過)。 – 2013-05-06 14:03:20

+0

啊,我明白了,謝謝詹姆斯,你的幫助很大! – PaulEx10 2013-05-06 14:05:02

1

當應用Kleen的星clouser任何RE,就會產生在(a+b+c)*的情況下空串(長度= 0),所以當*被0代替,其結果將是空字符串。爲了擺脫掉,這裏空字符串我們把(CONCAT)(a+b+c)(a+b+c)*之前,因此由(a+b+c)*生產的每串是由兩種a or b or c前綴,我們確保一個空字符串不能由該RE產生這樣。

相關問題