我正在教科书中解决运动问题,我想知道(0 * 1 *)*和(0 + 1)*是否相同。我认为它们是相同的,但是我不知道如何证明这一点。它们是相同的正则表达式吗?
答案 0 :(得分:0)
不,不是。例如,第一个会匹配0011
,但第二个不会。
您可以检查它们的行为:https://regex101.com/
答案 1 :(得分:0)
不,它们不相同:
0*1*
匹配任意数量的零(包括无),然后匹配任意数量的零(包括无)。然后通过()*
0 + 1
匹配强制单零,然后匹配至少一个或多个空格,然后再匹配一个空格,然后匹配强制单零。再次,像以前一样,通过()*
重复了多次。 因此,两者匹配的事物非常不同,第一个将匹配000000
或1111
之类的输入,因为它(基本上)具有一个可选的零或一,因此输入仅具有一个这些是正确的,但根据第二个正则表达式不正确。虽然第二个匹配的输入将在强制0
和1
字符之间至少有两个或多个空格,但是第一个正则表达式将拒绝该输入,因为它不允许使用空格。
答案 2 :(得分:0)
我认为您的意思是(0+1)*
,而不是(0 + 1)*
(注意空格,它们在处理正则表达式时很有意义)。
要回答您的问题,请否。他们不一样。
+
量词的意思是“一个或多个”(并不意味着您可能会想到的“或”),因此(0+1)*
的正则表达式将匹配01
而不是{{1 }},而10
的正则表达式将匹配两者。