2015-06-20 96 views
1

如何定義正則表達式以使用以下語言?支付b和偶數個字符串的正則表達式

L = {w∈{a,b} * | W具有偶數B的}的

我試圖創建相關的自動機:

enter image description here

,並從我試圖運用算法來獲得DFA定期espression和我得到這個公式: a*ba*b

這是正確的答案嗎?

回答

2

您是接近,但你在pattern.You結束需要一個a*還需要錨^$指定開始和你string.Then結束,你可以把你所有的正則表達式的捕獲組內和使用*匹配任何偶數如果ba*的數量b零:

^((a*ba*ba*)*|a*)$ 

|是一個邏輯OR,讓您的正則表達式引擎匹配(a*ba*ba*)*a*

Regular expression visualization

Debuggex Demo

您也可以使其更加優雅,但因爲你不熟悉非常符合正則表達式首先我建議前面的模式。

例如下面將工作:

^(((a*b){2})*)a*$ 
+0

這個'(a * U(ba * b)*)*'怎麼樣? – smartmouse

+0

@smartmouse它非常低效,你的模式結尾還有一個'b',在你的情況下,你的模式沒有限制!因爲我在你的正則表達式的末尾添加了'a *'。 – Kasramvd

+0

你的新模式有效,但比必要的複雜一點。我認爲'^(a * ba * b)* a * $'就足夠了。 – Brian

0

這裏是最好的解決辦法,因爲我遵循從DFA正則表達式轉換算法(由鋼筆完成):

(a*|ba*b)* 

你可以測試它here,你可以通過觀看這個video瞭解這個算法。