2016-08-05 72 views
-1

我正則表達式巫術的力量是不夠的,打這一個:如何重複非捕獲組「子查詢」?

輸入:

x|a=1|b=2,y|c=3|d=4,
(獎勵積分,如果你讓我放棄最後一個逗號)

期望的匹配(和組):

x|a=1|y=2(X,A,1,Y,2)
y|c=3|d=4(Y,C,3,d,4)
(獎金點,如果我可以命名每個組)

我的失敗模式:

(x|y|z)(?:\|(.+?)=(.+?))*,

基本上,我想X,Y或Z和所有的 '|'之後分離出'this = that'。

匹配(和組)我得到:

x|a=1|b=2,(X,B,2)
y|c=3|d=4,(Y,d,4)

我有逗號在比賽中,但這沒什麼大不了的,主要問題是我只能得到每場比賽的最後一個「小組」。爲什麼第一個被忽略?

+0

在.NET中你可以看到重複捕獲鏈接在組[?]。捕獲。不要擔心,您已經擁有正確的正則表達式,並且可以提取所有數據。順便說一句,我認爲你可以放棄最後的逗號 –

+0

該死的,我沒有想到捕獲。我想我會改變測試網站... – Kilazur

+0

這是你自己的格式?正如@KovpaevAlexey所說,如果每個子序列都以'[a-z] \ |'開頭,那麼您就不需要逗號。但如果它是你自己的格式,我會使用JSON或XML代替。或者去全狀態機並自己寫。但是這基本上再也沒有道理了,可悲的說。 –

回答