正则表达式接受符合"(' a' * N - ' b' * M)%3 = 0"需求

时间:2017-06-07 15:06:01

标签: regex

进一步研究这个主题,我一直试图写一个正则表达式: "来自{a,b}的字母表仅在字符串出现时才接受该字符串' a'减去' b'可以除以3。" 有人可以帮我处理这件事吗?我知道我应该提供自己的任何意见来帮助解决这个问题,但我不知道任何线索。

也许只是它可能应该从(aaa)作为基础开始,然后进一步扩展下一对"对" ' a'但我不知道如何让它像#34;(aaa)aaabbb"并且不喜欢"(aaa)ababab"。

1 个答案:

答案 0 :(得分:3)

使用有限状态自动机最容易表示基于计数的正则表达式问题,并将其简化为单一模式。

有三个节点,每个模块值一个节点;将转换定义为处理ab时模块化值的变化。

然后通过单个转换替换节点中的每个路径来折叠一个节点。

  • 0->2->00->0ba
  • 0->2->10->1bb
  • 1->2->01->0aa
  • 1->2->11->1ab

重复另一个节点。

  • 0->1(->1)*->00->0(a|bb)(ab)*(b|aa)

最终模式为:(ba|(a|bb)(ab)*(b|aa))*