进一步研究这个主题,我一直试图写一个正则表达式: "来自{a,b}的字母表仅在字符串出现时才接受该字符串' a'减去' b'可以除以3。" 有人可以帮我处理这件事吗?我知道我应该提供自己的任何意见来帮助解决这个问题,但我不知道任何线索。
也许只是它可能应该从(aaa)作为基础开始,然后进一步扩展下一对"对" ' a'但我不知道如何让它像#34;(aaa)aaabbb"并且不喜欢"(aaa)ababab"。
答案 0 :(得分:3)
使用有限状态自动机最容易表示基于计数的正则表达式问题,并将其简化为单一模式。
有三个节点,每个模块值一个节点;将转换定义为处理a
或b
时模块化值的变化。
然后通过单个转换替换节点中的每个路径来折叠一个节点。
0->2->0
→0->0
(ba
)0->2->1
→0->1
(bb
)1->2->0
→1->0
(aa
)1->2->1
→1->1
(ab
)
重复另一个节点。
0->1(->1)*->0
→0->0
((a|bb)(ab)*(b|aa)
)
最终模式为:(ba|(a|bb)(ab)*(b|aa))*