具有给定长度的正则表达式,具有确切的字符数

时间:2013-06-02 19:24:16

标签: regex

我正在寻找语言$w\in {a,b}^n$的正则表达式,其中包含 k a 的确切数字。

我几乎坚持这一点。对于不同的长度,使用${{b}^*a{b}^*}^k$可以很容易地解决问题。

有没有人对如何实现这样的正则表达式有任何建议?

3 个答案:

答案 0 :(得分:2)

我会用这个:

(b*ab*){k}

它只使k个块包含一个a。因此,单词有k a。 其中一个b *可以在左侧或右侧分解。

答案 1 :(得分:1)

此处没有简单的解决方案。

虽然这种语言是常规的,但描述起来却很难看。您可以通过将两种语言((a|b)^nb*(ab*)^k)的(普通)DFA相互交叉来获得它,但是您将获得一个返回(n-k)*k个状态的DFA。并将其转换为正则表达式不会使它变得更好。

但是,如果您正在寻找实际的实现,它会变得更容易。您可以简单地针对两个正则表达式测试输入,或者您可以使用lookahead将它们组合成一个正则表达式:

/^(?=[ab]{n}$)b*(ab*){k}$/

答案 2 :(得分:0)

您可以使用前瞻来强制执行整体长度:

^(?=.{5}$)([^a]*a){2}[^a]*$

请参阅此demonstrated on rubular