2011-06-08 108 views
0

的多個組,我不知道這是可能的正則表達式,但我想是這樣......正則表達式匹配文本

輸入:

a="abc1" 
...some stuff... 
a="def1" 
...some stuff... 
a="ghi1" 
...some stuff... 
b="123a" 
...some stuff... 
a="abc2" 
...some stuff... 
a="def2" 
...some stuff... 
a="ghi2" 
...some stuff... 
b="123b" 
...some stuff... 
a="abc3" 
...some stuff... 
a="def3" 
...some stuff... 
a="ghi3" 
...some stuff... 
b="123c" 
...some stuff... 

想:

match_1 = 123a 
match_1_1 = abc1 
match_1_2 = def1 
match_1_3 = ghi1 

match_2 = 123b 
match_2_1 = abc2 
match_2_2 = def2 
etc. 

嘗試:

a="([^"]+)"[\D\W\S]+b="([^"]+)" 

This w應該得到每個部分的第一個「a = abc ...」和「b = 123 ...」,但不能將「def ...」和其他部分分組。

正則表達式的味道是JMeter中的一種,我認爲它是Perl。

任何建議或評論表示讚賞, :)

+0

對不起,忘了說,它是JMeter使用的那個。所以我相信這是Perl類型。 – Aion 2011-06-08 01:13:56

+0

如果爲某個問題提供了正確或有用的答案,則習慣上將該答案標記爲正確(正確答案旁邊的綠色勾選複選標記)。請檢查您的三個未解答的問題,並在適用的情況下選擇適當的正確答案。 :) – 2011-06-08 02:03:51

+0

@Jared - fml,我認爲點擊向上箭頭意味着它是正確的答案。對於那些回答我的問題的人非常抱歉。 – Aion 2011-06-08 02:16:35

回答

1

這會滿足您的需求?

(?:a="([^"]+)".*?)(?:a="([^"]+)".*?)(?:a="([^"]+)".*?)b="([^"]+)" 

你可以看到它here on Regexr

的組是在順序,因爲它們出現在輸入

組1 = ABC1
第2組= DEF1
第3組= ghi1
組4 = 123a

您需要打開\ s(dotall)修飾符,以使.與換行符匹配。 (?:)是非捕獲組。

+0

這很好。我沒有說明這一點,但如果「a =」的數量是任意的,而「b =」的數量保持單一的話會怎樣?例如,如果第一組有5個「a =」,第二組有4個「a =」。無論如何分組它,以便1「b =」組與X「a =」? – Aion 2011-06-09 02:38:45

+1

我不知道一個簡單的解決方案,我只有一個複雜的小想法,不知道是否會工作。它沒有問題匹配你想要的,你可以使用'(?:a =「([^」] +)「。*?)* b =」([^「] +)」',但因爲在第一組之後的量詞,總是隻有第一組中的「a =」的最後匹配。你可以看到它[Regexr](http://regexr.com?2tv0q) – stema 2011-06-09 07:51:14