我正在通過有關正則表達式的練習,而且我很不確定如何做到這一點。簡化正則表達式
正則表達式是:
((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