0

交替是关于联合,那么如果我们有 R={"a"} , S={"b"} ,那么 R|S 将是 {"a", "b"}。

为什么 ab, ba 包含在 (a|b)* 中?

我不明白为什么

在此处输入图像描述 在此处输入图像描述

正则表达式维基百科

我认为结果集应该是
(a|b)* = {Ɛ,"a", "b", "aa","bb", "aaa", "bbb", ...}

4

4 回答 4

3

本质上,您可以将 (a|b)* 视为

  • (空集)或
  • (a|b) 或
  • (a|b)(a|b) 或
  • (a|b)(a|b)(a|b) ...

从中可以清楚地看出,a 或 b 的选择可以按顺序交替。希望这可以帮助。

于 2019-04-29T06:16:35.597 回答
3

表达式a|b匹配ab

例如,表达式(a|b)*匹配(a|b) (a|b) (a|b)。在这些备选方案中的每一个中,您都可以单独选择是匹配a还是b. 您不必为所有这些都选择相同的。

变体“要么a*b*”的发音完全一样:a*|b*.

于 2019-04-29T06:19:46.680 回答
2

*意味着零或更多,这几乎就像你会写:

(a|b)(a|b)(a|b)(a|b)(a|b)...

意味着它重复模式,而不是匹配的文本,所以如果它一次匹配a它就不必a再次匹配,因为它重复模式(a|b),所以再一次,它会匹配aor b

a这就是为什么它可以匹配s 和bs 的任意组合

于 2019-04-29T06:44:13.877 回答
1

该模式(a|b)*使用交替匹配 a OR b 并由于量词而重复 0+ 次 *

一个示例可以在没有交替的情况下编写(a|b)*,这可能有助于推理为什么您会获得这些匹配项:

a*(?:b+a*)*

要仅获得连续匹配而不是混合匹配,您可以使用反向引用 \b(a|b)\1*\b来重复组中准确捕获的内容。查看演示

于 2019-04-29T07:08:00.907 回答