正则表达式用于包含a和偶数个b的字符串

时间:2015-06-20 13:36:37

标签: regex string regular-language language-theory

如何定义正则表达式以使用以下语言?

L = {w∈{a,b} * | w有偶数个b }

我尝试创建相关的自动机:

enter image description here

从那时起我尝试应用算法从DFA获得常规表达式,我得到了这个公式:a*ba*b

这可能是正确答案吗?

2 个答案:

答案 0 :(得分:2)

你已经很近了,但你的模式结尾需要a*。你还需要锚点^$来指定你的字符串的开头和结尾。然后你可以将所有正则表达式放在捕获组中,并使用*匹配任何偶数({1}},b匹配a*的零数:

b

注意 ^((a*ba*ba*)*|a*)$ 是一个逻辑OR,使您的正则表达式引擎匹配|(a*ba*ba*)*

Regular expression visualization

Debuggex Demo

你也可以让它更优雅但是你对正则表达不太熟悉,我首先提出了前面的模式。

例如,以下内容将起作用:

a*

答案 1 :(得分:0)

这是最好的解决方案,因为我遵循从DFA转换为正则表达式的算法(通过笔完成):

(a*|ba*b)*

您可以对其here进行测试,然后您可以了解此算法video