我正在通过有关正则表达式的练习,而且我很不确定如何做到这一点。简化正则表达式
正则表达式是:
((a*)(b*))*U(a*)
我在这个非常糟糕,但我认为((a*)(b*))*
可以简化为(a U b)*
但是,如果这是正确的,比上届U(a*)
其实只是重复,所以我认为整个表达式可以简化为(a U b)*.
这看起来是否正确?
编辑︰ü代表工会
我正在通过有关正则表达式的练习,而且我很不确定如何做到这一点。简化正则表达式
正则表达式是:
((a*)(b*))*U(a*)
我在这个非常糟糕,但我认为((a*)(b*))*
可以简化为(a U b)*
但是,如果这是正确的,比上届U(a*)
其实只是重复,所以我认为整个表达式可以简化为(a U b)*.
这看起来是否正确?
编辑︰ü代表工会
你是对的。 (a*b*)*
可以匹配a和b的任何字符串,所以它们可以相等。 (a U b)*
相交a*
是a*
所以a*
是(a U b)*
的子集。因此,整个表达式可以简化为(a U b)*
。
的真正含义是什么((a*)(b*))*U(a*)
是(从here复制)
NODE EXPLANATION
--------------------------------------------------------------------------------
( group and capture to \1 (0 or more times
(matching the most amount possible)):
--------------------------------------------------------------------------------
( group and capture to \2:
--------------------------------------------------------------------------------
a* 'a' (0 or more times (matching the
most amount possible))
--------------------------------------------------------------------------------
) end of \2
--------------------------------------------------------------------------------
( group and capture to \3:
--------------------------------------------------------------------------------
b* 'b' (0 or more times (matching the
most amount possible))
--------------------------------------------------------------------------------
) end of \3
--------------------------------------------------------------------------------
)* end of \1 (NOTE: because you are using a
quantifier on this capture, only the LAST
repetition of the captured pattern will be
stored in \1)
--------------------------------------------------------------------------------
U 'U'
--------------------------------------------------------------------------------
( group and capture to \4:
--------------------------------------------------------------------------------
a* 'a' (0 or more times (matching the most
amount possible))
--------------------------------------------------------------------------------
) end of \4
这个表达式目前匹配所有这些序列:abUa bU U aabbUaa aaUaa aaU Uaa bbU ababUaa aabbaabbUaa
(看here)
有没有办法来简化这一点,而不删除捕获组和剩余的字母顺序。
编辑:如果您的正则表达式中的U
代表“union”,那么这个表达式是无效的。在正则表达式中没有办法联合任何东西。只有OR
,你需要使用|
(管道)。如果你想要工会((a*)(b*))*
和(a*)
那么可能它会是((a*)(b*))*
,但它仍然会匹配abaab
之类的东西。
尽管如此,在您的正则表达式语句中捕获组是无用的,所以类似[ab]*
就足以匹配任何数量的a
和b
's。
'U'代表工会吗?也就是说,对于'(a U b)*',你实际上是指在正则表达式中用'(a | b)*'或'[ab] *'表示什么?因为如果你认为这样的模式看起来就像你所建议的那样只是'(a | b)*'。 –
如果'U'被认为是“联合”,那么使用正确的符号('∪') - 或者至少在文本中声明它是适当的。 – Tomalak
现在编辑文本:) – user2795095