RE:a的数量可以被6整除,而b的数量可以被8整除

时间:2014-04-18 12:15:16

标签: regex dfa

  

查找表示由{a, b}构成的字符串的正则表达式,其中a的数量可被6整除,b的数量可以被8整除。

我尝试创建一个接受此类字符串的DFA。我的想法是使用所有余数mod 6和mod 8导致总共48个余数。因此,DFA中的每个州都是一对(r, s),其中r从0到6不等,s从0到7不等。开始状态(以及接受状态)是{{1}我们可以通过注意到如果我们输入(0, 0)状态"a"转换为(r, s)并且输入(r + 1, s),则转换为状态{{1 }}

然而,使用48个状态的DFA太难了,我不确定是否可以通过手动使用DFA最小化算法来最小化。

我真的不确定我们怎么能得到一个代表这种字符串的正则表达式。

1 个答案:

答案 0 :(得分:1)

如果允许使用前瞻:

^(?=b*((ab*){6})+$)a*((ba*){8})+$

Regular expression visualization

Debuggex Demo

匹配字符串的示例:bbaabbaabbaabb

想法很简单:我们知道如何匹配具有a s的数字的字符串可被6整除 - ^((b*ab*){6})+$,我们也知道如何匹配具有b s数的字符串的字符串8 - ^((a*ba*){8})+$。所以我们只是将一个正则表达式用于预测,另一个用于匹配部分。

如果您 需要匹配仅包含a s或仅包含b s的字符串,则以下正则表达式将执行:

^(?=b*((ab*){6})*$)a*((ba*){8})*$

Regular expression visualization

匹配字符串的示例:aaaaaabbbbbbbbbbaabbaabbaabb

Debuggex Demo