【问题标题】:Regular expression of string of a, b that doesn't contain aaa、b不包含aa的字符串正则表达式
【发布时间】:2015-01-29 12:17:06
【问题描述】:

只使用括号和 * 符号,我想到的一个例子是

((a|b)(bb*))*

但我可以有一个字符串,例如最后一个字母是 a 的 abba,它不包含在这个...有什么想法吗?

【问题讨论】:

  • 你是说这个^((a|b)(bb*))*$ 吗?

标签: regex


【解决方案1】:

这是 DFA:

Use the method described here 推导和求解 R1(初始状态)的方程:

R1 = bR1 + aR2 + λ
R2 = bR1 + λ

将 R2 替换为 R1:

R1 = bR1 + abR1 + a + λ

应用雅顿定理:

R1 = (b + ab)*(a + λ)

剩下的就是稍微改变一下语法:

(b|ab)*(a|)

这可以重写为 Perl 语法中的正则表达式进行测试:

^(a?b)*a?$

【讨论】:

  • 我稍后会为 DFA 添加一个图表,但它可以从上面的等式推导出来。
猜你喜欢
  • 2014-03-23
  • 2015-09-06
  • 2021-07-15
  • 1970-01-01
  • 2012-01-04
  • 2011-07-22
  • 2012-05-11
  • 2011-06-27
  • 2016-04-21
相关资源
最近更新 更多