正则表达式 |包含 "bbb"

Regex | Containing "bbb"

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

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

我不知道该如何表达。

有什么想法吗?提前致谢!

模式比较简单

/b{3}/g

如果你需要匹配3个且只匹配3个'b',你可以使用

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

根据标签 "automata",我猜您正在寻找这种正式语言的正式正则表达式。在这种情况下,正则表达式是 (a+b)bbb(a+b)。此正则表达式的剖析如下:

  • (a+b) 给出 "a" 或 "b"
  • (a+b)* 给出 "a"s 和 "b"s 的任意字符串
  • bbb 只给出字符串 bbb
  • 整个正则表达式描述了以任何内容开头,然后是 bbb,然后以任何内容结尾的任何字符串

为了证明这个正则表达式是正确的,注意:

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

晚上好!你可以使用这个表达式它可能有效

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

使用这个结果生成三重 (bbb) 最小字符串

通过关闭 (a+b),您可以生成任何类型的包含三元组 b 的字符串