正则表达式|包含“ bbb”

时间:2019-02-07 17:04:19

标签: regex automata

我正在尝试使用字符“ a”和“ b”创建一个正则表达式。 唯一的规则是正则表达式必须在某处包含单词“ bbb”。

这些是可能的:aabbbaaaaaababa,abbba,bbb,aabbbaa,abbabbba,... 这些是不可能的:abba,a,abb,bba,abbaaaabbaaaabba,...

我不知道该如何表达。

有什么想法吗?预先感谢!

3 个答案:

答案 0 :(得分:1)

基于标签“ automata”,我想您正在使用此正式语言的正式正则表达式。在这种情况下,正则表达式为(a + b) bbb(a + b)。此正则表达式的剖析如下:

  • (a + b)给出“ a”或“ b”
  • (a + b)*给出“ a”和“ b”的任何字符串
  • bbb仅提供字符串bbb
  • 整个正则表达式描述了任何以任何东西开头,然后有bbb,然后以任何东西结尾的字符串

要证明此正则表达式正确无误,请注意:

  • 此正则表达式仅生成包含子字符串bbb的字符串。这是由于中间部分。
  • 此正则表达式生成包含子字符串bbb的所有字符串。假设有一些字符串包含此正则表达式未生成的子字符串bbb。字符串要么以bbb开头,要么不是。如果是这样,则字符串将由我们的正则表达式生成,方法是将第一个(a + b)零次重复,第二个(a + b)重复n-3次,其中n是字符串的长度。否则,如果它不是以bbb开头,则将长度为n-1的后缀视为递归情况。因此继续,直到子案例确实以bbb开头(最终必须如此)。由于我们的正则表达式可以描述此后缀,因此原始情况也必须如此,因为我们可以将第一个(a + b)重复等于递归深度的次数。

答案 1 :(得分:0)

模式很简单

/b{3}/g

如果您需要它匹配3个和仅3个“ b”,则可以使用

/b{3}[^b]?/g

答案 2 :(得分:0)

晚上好!您可以使用此表达式可能会起作用

(a+b)* (bbb)(a+b)*

使用此结果将生成最小三倍(bbb)的字符串

并通过闭合(a + b)可以生成其中包含三进制b的任何类型的字符串