Regex 为什么我可以转换正则表达式1*0+;1*0(0+;1)*(0+;1)到1*0(0+;1)*?
我不太明白,为什么我可以将正则表达式Regex 为什么我可以转换正则表达式1*0+;1*0(0+;1)*(0+;1)到1*0(0+;1)*?,regex,finite-automata,Regex,Finite Automata,我不太明白,为什么我可以将正则表达式1*0+1*0(0+1)*(0+1)转换为1*0(0+1)*。有人能帮我吗?你可以使用分配定律: (1*0)+(1*0(0+1)*(0+1)) = (1*0ε)+(1*0(0+1)*(0+1)) = (1*0)(ε+(0+1)*(0+1)) 然后应用克莱恩星的定义a*=ε+a*a: = (1*0)((0+1)*) = 1*0(0+1)* 为什么你认为你不能?也许可以尝试一些示例字符串,看看它们是如何匹配的。如果您只是想了解您的模式,请尝试regex10
1*0+1*0(0+1)*(0+1)
转换为1*0(0+1)*
。有人能帮我吗?你可以使用分配定律:
(1*0)+(1*0(0+1)*(0+1))
= (1*0ε)+(1*0(0+1)*(0+1))
= (1*0)(ε+(0+1)*(0+1))
然后应用克莱恩星的定义a*=ε+a*a
:
= (1*0)((0+1)*)
= 1*0(0+1)*
为什么你认为你不能?也许可以尝试一些示例字符串,看看它们是如何匹配的。如果您只是想了解您的模式,请尝试regex101(),我已经看到了自动机,因此我知道它接受相同的字符串。我的问题主要是为什么结尾处的
(0+1)
可以省略,因为这意味着结尾处必须有另一个0
或1
,而(0+1)*
意味着可能有另一个0
或1
,但不必如此,我认为转换也不有效。第二个正则表达式匹配0
,第一个不匹配。如果第二个正则表达式末尾有一个+
而不是*
,那么我猜它们是等价的。哦,那么+
在某些(但不是全部?)情况下实际上是
?