关于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?
我不明白为什么
我觉得结果集应该是
(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
匹配 a
或 b
。
表达式 (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)
,所以同样,它将匹配 a
或 b
.
这就是为什么它可以匹配 a
s 和 b
s
的任意组合
模式 (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。
Alternation是关于并集,那么如果我们有R={"a"},S={"b"},那么R|S就是{"a","b"}.
为什么 (a|b)* 中包含 ab、ba?
我不明白为什么
我觉得结果集应该是
(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
匹配 a
或 b
。
表达式 (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)
,所以同样,它将匹配 a
或 b
.
这就是为什么它可以匹配 a
s 和 b
s
模式 (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。