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

时间:2019-10-03 07:48:01

标签: regex

我正在教科书中解决运动问题,我想知道(0 * 1 *)*和(0 + 1)*是否相同。我认为它们是相同的,但是我不知道如何证明这一点。它们是相同的正则表达式吗?

3 个答案:

答案 0 :(得分:0)

不,不是。例如,第一个会匹配0011,但第二个不会。

您可以检查它们的行为:https://regex101.com/

答案 1 :(得分:0)

不,它们不相同:

  • 0*1*匹配任意数量的零(包括无),然后匹配任意数量的零(包括无)。然后通过()*
  • 将其重复任意次(包括无重复)。
  • 0 + 1匹配强制单零,然后匹配至少一个或多个空格,然后再匹配一个空格,然后匹配强制单零。再次,像以前一样,通过()*重复了多次。

因此,两者匹配的事物非常不同,第一个将匹配0000001111之类的输入,因为它(基本上)具有一个可选的零或一,因此输入仅具有一个这些是正确的,但根据第二个正则表达式不正确。虽然第二个匹配的输入将在强制01字符之间至少有两个或多个空格,但是第一个正则表达式将拒绝该输入,因为它不允许使用空格。

答案 2 :(得分:0)

我认为您的意思是(0+1)*,而不是(0 + 1)*(注意空格,它们在处理正则表达式时很有意义)。

要回答您的问题,请。他们不一样。

+量词的意思是“一个或多个”(并不意味着您可能会想到的“或”),因此(0+1)*的正则表达式将匹配01而不是{{1 }},而10的正则表达式将匹配两者。