2014-02-16 34 views
0

我是新來的正則表達式,我努力學習它,我碰到這個問題他們是如何得到這個答案的所有沒有子字符串'ab'的字符串?

正則表達式來了 - Let the alphabet = {a,b}.寫的正則表達式:

All strings that do not have the substring 'ab' 

他們是怎麼得到的答案b*a*?我以爲b和b之間的Kleene星可以有ab,這個命令也有問題嗎?

我在這裏找到它:http://courses.washington.edu/css448/zander/Notes/reg343ans.txt

+3

如果這是正則表達式的唯一部分,它應該從字面上匹配任何東西。 – Anonymous

回答

3

在正則表達式中,順序無關緊要。

b*a* 

表示0或更多'b',後面接0或更多'a'。 (這是假設的正則表達式搜索錨開始和字符串的結尾 - 在大多數正則表達式語法這實際上可以寫爲:^ B * A * $)

因此,它將匹配

  • 任意數量的「一個是
  • 任意數量的」 b的
  • 「後跟任意數量的b的」任意數量的是

這是一個奇怪的問題,但他們是對的。如果你只有a和b作爲可能的字符,那麼任何b後跟a的序列都有子字符串'ab'

+0

關鍵是a可以重複0次,所以b可以重複。因此,這些完全沒有效果,因爲正則表達式沒有任何需要查找的字面意思。 – Anonymous

+0

我已經添加了一個註釋,這假定正則表達式被錨定。取決於正則表達式的實際類型/用法,這可能或不可能是這樣的 – pscs

+0

好吧,這很公平。 – Anonymous

相關問題