正式语言的正则表达式

时间:2013-03-16 14:18:39

标签: regex formal-languages

我正在尝试为包含以下内容的语言编写正则表达式:

  • 包含任意数量的字符串后跟单个b和
  • 的字符串
  • 包含任意数量的字符串,后跟单个b后跟偶数个字符串的字符串。

我想(b | ((a^+)b)^* ) U (a | ( (b^+) a)* ),但这是错误的。

有谁知道我错在哪里?

1 个答案:

答案 0 :(得分:2)

<强>假设

我认为它应该是"strings that consist of",而不是"strings which contains"。不同之处在于bbbbbaaabaabbbb"contains"的有效字符串(因为它包含aaabaa)。

要使其"strings that contains",唯一的区别是在开头添加.*?,在结尾添加.*(或[ab]*?[ab]*希望将其限制为ab)。

问题分析

我相信您可以将问题简化为"strings that consist of any number of a's followed by a single b followed by an even number of a's",因为0是偶数。

我不知道正则表达式中^U正在做什么。这种语言特定的语法(通常^表示行/字符串的开头)?

<强>解决方案

应该如此简单:

a*b(aa)*

a* - 任意数量的 b - 单个b
(aa)*偶数个

修改

根据评论,您可能希望字符串包含以下内容:

  • 任意数量的
  • 后跟以下任意数量:
    • 单个b
    • 后跟偶数个(数字!= 0)
  • 可选地后跟b

正则表达式将是:

a*(b(aa)+)*b?