关于Alternation的(a|b)*例子,我很疑惑,为什么结果集中会有ab,ba?

Example of (a|b)* about Alternation , I am confused , Why are ab, ba in the result set?

Alternation是关于并集,那么如果我们有R={"a"},S={"b"},那么R|S就是{"a","b"}.

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

我不明白为什么

Regular Expresion wikipedia

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

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

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

由此可见,a或b的选择顺序是可以交替的。希望这有帮助。

表达式 a|b 匹配 ab

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

变体 "either a* or b*" 的发音完全一样:a*|b*

* 表示零个或多个,这几乎就像你会写:

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

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

这就是为什么它可以匹配 as 和 bs

的任意组合

模式 (a|b)* 使用 alternation to match either a OR b and repeat that 0+ times due to the quantifier *

an example(a|b)* 没有交替,这可能有助于解释为什么你得到这些匹配:

a*(?:b+a*)*

要只获得连续匹配而不是混合匹配,您可以使用 backreference \b(a|b)*\b to repeat what has exactly being captured in the group. See a demo