do(a + b)*和(a | B)*产生相同的DFA和相同的输出? 在数学中,无论涉及单词“或”,我们都使用加法运算符。 那么这是否意味着两个表达式都是等价的?
答案 0 :(得分:1)
没有
(a+b)*
匹配至少一个a
后跟b
,零次或多次。因此,为了匹配非空字符串,字符串必须在某些时候包含ab
。
(a|B)*
需要a
或b
,零次或多次。它可以匹配空字符串,所有a
s的字符串,所有b
s的字符串等。
第二个表达式匹配以下示例中的整个字符串:a
,aa
,aaa
,b
,bb
,bbb
第一个表达式在技术上匹配(因为零长度字符串匹配),但与整个字符串不匹配。被捕获的群体是不同的。
所以,不,他们不等同。
答案 1 :(得分:1)
这取决于你从中得到2个正则表达式的上下文。
如果您在现实生活正则表达式引擎的语法中解释这两个正则表达式,它们具有不同的含义,如Ed Cottrell explained in his answer。 +
表示重复一次或多次。 |
表示更改。
但是,如果您将+
中的(a+b)*
解释为替换,遵循大多数关于自动机理论的书中的符号,并{{{ 1}}在|
中作为交替,遵循大多数现实生活中的正则表达式引擎中的符号。