2013-03-11 61 views
0

我期待提取使用正則表達式的數據 - 實施例::正則表達式到組數據

http://www.test.com/?name=A_B_C_D_E_F&gclid=something

http://www.test.com/?name=A_B_C_D_E_F

我想以提取下一個4個字以下name=A_

所以期望的輸出是 -

B 
C 
D 
E 

我期待使用反向引用即

$1將返回B$2將返回C $3將返回D$4將提前返回E

非常感謝提取這些值。

+1

用正則表達式,它有助於解釋你所使用的語言從正則表達式。 C,C++,C#,Perl,Python,PHP,Java,Ruby的答案有很多共同之處,而且細節上有很多不同之處。 – 2013-03-11 17:45:46

回答

2
(?:\?|&)name=A(_[^_&]+)(_[^_&]+)(_[^_&]+)(_[^_&]+) 
+0

謝謝。我編輯了我的問題以表明&符號並不總是強制性的。 – 2013-03-11 17:16:27

+0

@thinking_hydrogen - 我想你可能誤解了。一開始,我說可以有一個問號或一個&符號。在剩下的時間裏,我正在尋找非'_'和非'''由下劃線分隔的字符串。例如,我不知道在你的「單詞」中是否可以接受「%20」(在URL中常見)。換句話說,我的表情中的搭配與跟隨是否有&符號無關。我只是說,如果遇到&,正則表達式應該「退出」,例如,在找到四個單詞之前。 – 2013-03-11 17:36:38

2

這應該給您預期的結果:

(?<=name=A_)([^\_]+)_([^\_]+)_([^\_]+)_([^\_]+)

http://regex101.com/r/xO1oE8

+0

謝謝,我得到了序列未被識別的錯誤?<= ...但稍作修改就修正了它 - (?=。*?name = A _([^ \ _] +)_([^ \ _] +)_([^_ _] +)_([^ \ _] +))。* – 2013-03-11 17:15:41

+0

您使用哪種語言來處理字符串? '<'可能必須用轉義字符轉義。 – 2013-03-11 17:26:33

+0

或者有可能正則表達式語言不支持積極的後臺處理。 – 2013-03-11 17:48:39