2015-01-10 71 views
1

我試着寫正則表達式來解析字符串類似的標籤(3個字符)和這些標籤都是退休的字符串正則表達式匹配的所有標籤

ABC=TEXT 1 - HERE.. DEF=/TEXT 2: TEXT .. ZYX=TEXT 3 TEXT 

當我使用

#([A-Z]{3})=(.*)+#isU 

我只得到標籤ABC,DEF,...但沒有得到內容。我怎麼能得到兩個?

我想獲得與對標籤和內容

ABC 
TEXT 1 - HERE.. 

DEF 
/TEXT 2: TEXT .. 

ZYX 
TEXT 3 TEXT 

更新結果:見https://regex101.com/r/uI0fW4/1

+0

什麼編程語言/正則表達式引擎的數據?無論如何其餘的是第二個匹配組 – m0skit0

+0

我正在使用PHP語言 – mest

+0

'ABC'將在'$ match [1]'中,'TEXT 1 HERE'將在'$ match [2]'中。 – Barmar

回答

2

我的例子,您需要使用一個積極的預測先行斷言。

([A-Z]{3})=(.*?)(?=[A-Z]{3}=|$) 

DEMO

1

([A-Z]{3})=(.*)+正則表達式,具體
這個子表達式

(.*)+ 

告訴引擎覆蓋捕獲組1分多次,因爲它可以。
在上次寫入時,.*什麼都不匹配,因爲它什麼都不能匹配。因此該捕獲組是空的。

你可以用這個代替,以獲得捕獲組2

# (\b[A-Z]{3})=((?:(?!\b[A-Z]{3}=).)*) 

(\b [A-Z]{3})    # (1) 
= 
(       # (2 start) 
     (?: 
      (?! \b [A-Z]{3} =) 
      . 
    )* 
)        # (2 end)