Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式(0*1*)*和(0+1)*是否相同?_Regex - Fatal编程技术网

Regex 正则表达式(0*1*)*和(0+1)*是否相同?

Regex 正则表达式(0*1*)*和(0+1)*是否相同?,regex,Regex,我在解决课本上的练习题,我想知道0*1**和0+1*是否相同。我认为他们是一样的,但我不知道如何证明这一点。它们是相同的正则表达式吗?不,它们不是。例如,第一个on将匹配0011,但第二个不会匹配 您可以检查它们的行为方式:不,它们不一样: 0*1*匹配任意数量的零(包括none),后跟任意数量的一(包括none)。然后重复多次,包括无通孔* 0+1匹配一个强制的单个零,然后至少匹配一个或多个空格,然后匹配一个或多个空格,然后匹配一个强制的单个零。同样,这是重复任何次数通过*像以前一样。 所以,

我在解决课本上的练习题,我想知道0*1**和0+1*是否相同。我认为他们是一样的,但我不知道如何证明这一点。它们是相同的正则表达式吗?

不,它们不是。例如,第一个on将匹配0011,但第二个不会匹配


您可以检查它们的行为方式:

不,它们不一样:

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等输入才会匹配,因为两者都是必需的,而第一个正则表达式允许缺少每个字符。