【发布时间】:2019-03-11 12:32:20
【问题描述】:
假设我有一个识别语言 L 的确定性有限状态自动机,它由 {a, b}* 中包含奇数个 b 的所有字符串组成 使得字符串中每两个 b 之间至少有一个 a。
我设法为此导出了有限状态机,如 example 所示(复选框表示已接受状态):
但现在我被困住了;如何将其转换为正则表达式?我真的很挣扎,因为这是一个有点复杂的例子。我试过了:
a*b[a*ba*b]*a*
但这仍然匹配偶数个 b 的字符串。什么是正确的正则表达式?
【问题讨论】:
-
忘了问,字符串的开头和结尾也可以有
as 吗?例如aba,或者as 必须在bs 之间? -
由于向我提供了问题,因此措辞有些不清楚,但我认为 a 可以在开头或结尾。只要它有奇数个 b,在任意 2 个连续的 b 之间至少有一个 a。
-
你有
a*b[a*ba*b]*a*,你想要a*b(a*ba*b)*a*。方括号表示您正在匹配它们之间的所有字符,即它将匹配a、b和*。圆括号用于组,这是您想要的。
标签: regex regular-language finite-automata