regex - 从左到右阅读时,a 和 b 的数量相同,但一个字母的数量不得超过另一个字母的三个以上

标签 regex finite-automata state-machine

我能否获得有关如何为字母表 {a, b} 构造正则表达式的提示,该表达式接受以下所有字符串:

  1. 具有相同数量的 ab
  2. 从左到右读取字符串,ab 的数量之差永远不会大于 2。

例如:

  • aaa 无效(因为 ab 多 3 个)
  • aa 无效(ab 的数量不同)
  • aabbab 有效(ab 的数量相同,且 a 的累计数量>'s 或 b's 永远不会比另一个多三个)
  • [空字符串]有效
  • bbaabbaa 有效

最佳答案

如果只有第一个约束(具有相同数量的 a 和 b),这是不可能的。由于第二个约束,您的问题有一个解决方案。

首先考虑完成您的工作的有限自动机(我将其留给您作为练习)然后将其转换为正则表达式会更容易。

转换后的正则表达式将是: [ (((a | (aab) (ab)*) b)* (((b | bba) (ba)*) a)* ]* (也许可以简化,也可以留下作为练习)。

关于regex - 从左到右阅读时,a 和 b 的数量相同,但一个字母的数量不得超过另一个字母的三个以上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19746929/

相关文章:

mysql - MYSQL 中的正则表达式错误

ruby-on-rails-3 - mongoid 的最佳状态机 gem 是什么?

javascript - 没有\p{L} 用于 JavaScript 正则表达式?在 JS 正则表达式中使用 Unicode

javascript - 将常规 json 转换为 d3.js 的 flare.json?

python - 将 re 与 rsplit 一起使用

regex - 正则表达式转 DFA

computer-science - DFA最小化测试套件?

c++ - 状态机 - 保存状态、事件和 pFunc 的结构

c - 限制有限状态自动机字符串匹配的字母表

c# - .NET 无状态多重 PermitIf