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

Regular expression for strings that cointains a and an even number of b's

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

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

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

然后我尝试应用该算法从 DFA 获取正则表达式,我得到这个公式:a*ba*b.

这可能是正确答案吗?

你很接近,但你需要在你的 pattern.You 末尾有一个 a* 还需要锚点 ^$ 来指定你的开始和结束string.Then 您可以将所有正则表达式放在一个捕获组中,如果 b 则使用 * 来匹配任何偶数,如果 b 则使用 a* 来匹配零个数]:

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

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

Debuggex Demo

你也可以让它更优雅,但由于你对正则表达式不是很熟悉,所以我建议使用前面的模式。

例如以下将起作用:

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

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

(a*|ba*b)*

你可以测试一下here and you can learn about this algorithm watching this video