Regex 正则表达式(0*1*)*和(0+1)*是否相同?
我在解决课本上的练习题,我想知道0*1**和0+1*是否相同。我认为他们是一样的,但我不知道如何证明这一点。它们是相同的正则表达式吗?不,它们不是。例如,第一个on将匹配0011,但第二个不会匹配Regex 正则表达式(0*1*)*和(0+1)*是否相同?,regex,Regex,我在解决课本上的练习题,我想知道0*1**和0+1*是否相同。我认为他们是一样的,但我不知道如何证明这一点。它们是相同的正则表达式吗?不,它们不是。例如,第一个on将匹配0011,但第二个不会匹配 您可以检查它们的行为方式:不,它们不一样: 0*1*匹配任意数量的零(包括none),后跟任意数量的一(包括none)。然后重复多次,包括无通孔* 0+1匹配一个强制的单个零,然后至少匹配一个或多个空格,然后匹配一个或多个空格,然后匹配一个强制的单个零。同样,这是重复任何次数通过*像以前一样。 所以,
您可以检查它们的行为方式:不,它们不一样: 0*1*匹配任意数量的零(包括none),后跟任意数量的一(包括none)。然后重复多次,包括无通孔* 0+1匹配一个强制的单个零,然后至少匹配一个或多个空格,然后匹配一个或多个空格,然后匹配一个强制的单个零。同样,这是重复任何次数通过*像以前一样。 所以,这两个匹配非常不同的东西,第一个匹配000000或1111这样的输入,因为它基本上有一个可选的0或1,所以只有一个这样的输入是正确的,但不符合第二个正则表达式。虽然第二个将匹配在强制0和1字符之间至少有两个或更多空格的输入,但第一个正则表达式将拒绝,因为它不允许空格。我想你的意思是0+1*而不是0+1*注意空格,它们在处理正则表达式时很有意义 回答你的问题,不,它们不一样 +量词表示一个或多个,它并不表示或像您可能认为的那样,因此0+1*正则表达式将匹配01而不是10,而0*1**正则表达式将匹配两者。一个匹配000111,另一个匹配01 01 01 01 01 01 0 1。0+1*中的空格如何,即使使用0+1*正则表达式也不会匹配0000000或1111,只有01或00001或0010100001等输入才会匹配,因为两者都是必需的,而第一个正则表达式允许缺少每个字符。