1

我正在尝试为一种语言编写一个正则表达式,该语言包括:

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

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

有谁知道我错在哪里?

4

1 回答 1

2

假设

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

要做到这一点"strings that contains",唯一的区别是添加.*?到开头和.*结尾(或者[ab]*?如果[ab]*您想将其限制为aand b)。

问题分析

我相信您可以将问题简化为"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*- 任意数量的 a
b- 一个 b
(aa)*一个偶数的 a

编辑:

根据评论,您可能需要包含以下内容的字符串:

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

正则表达式将是:

a*(b(aa)+)*b?
于 2013-03-16T14:37:11.317 回答