2013-02-22 115 views
0

我使用基本的正則表達式分析器https://code.google.com/p/slre/它有一些基本的正則表達式集實現。我想解析HTTP頭,它看起來像正則表達式 - 線跳過

GET /3397557/RSVP006_male_468X60_05.swf HTTP/1.1 
User-Agent: Opera/9.80 (Macintosh; Intel Mac OS X 10.8.2) Presto/2.12.388 Version/12.10 
Host: s0.2mdn.net 

我的目的是去「主持人:」我不打擾約的User-Agent:行,讓我怎麼有跳過user-agent行和招舉辦: ?我想到目前爲止,表達是很沒用,

"^\\s*(GET|POST)\\s+(\\S+)\\s+HTTP/(\\d)\\.(\\d)\\s+User-Agent:\\s+.*?\\s+Host:\\s+(\\S+)" 

我知道User-Agent:\\s+.*?不是我們跳過線,但我不知道如何做到這一點,任何幫助嗎?

+0

我粘貼的頭了錯位的開始將只匹配,其實每個行會,因爲「\ r \ n個新行「 – user2085689 2013-02-22 00:29:05

+0

有一個編輯按鈕。 – Piccolo 2013-02-22 00:31:12

+0

'/.*?\bHost:(。*)/ s' - 類似的東西。你需要多行匹配(在我的例子中是's'),那麼很簡單。 – Madbreaks 2013-02-22 00:33:12

回答

0

好吧,我不熟悉你的庫,但低於工程正則表達式(JavaScript實現)

var str = "GET /3397557/RSVP006_male_468X60_05.swf HTTP/1.1"+ 
"User-Agent: Opera/9.80 (Macintosh; Intel Mac OS X 10.8.2) Presto/2.12.388 Version/12.10"+ 
"Host: s0.2mdn.net" 

// capture the `Host` value 
// has `m` flag to ensure multi-line capturing - not sure if you need to do that with 
// your library, or even how to do that 
var m = str.match(/Host:\s*(.+)/m) 
// get the first captured match, which is the value of the `Host` field 
console.log(m[1]) 

編輯:更仔細的正則表達式

  • 添加換行符到字符串(忘了javascript需要明確添加)
  • added start marker^)t他正則表達式的開始,所以當Host:是在一行
var str = "GET /3397557/RSVP006_male_468X60_05.swf HTTP/1.1\n"+ 
"User-Agent: Opera/9.80 (Macintosh; Intel Mac OS X 10.8.2) Presto/2.12.388 Version/12.10\n"+ 
"Host: s0.2mdn.net" 

var m 
if(m = str.match(/^Host:\s*(.+)/m)) // added `[\r\n]+` 
    console.log(m[1]) // only if there is a match... 
+0

非常好,這個工程。謝謝! – user2085689 2013-02-22 00:51:35

+0

這與頭部任何部分的字符串'Host:'匹配,所以如果你想要非常小心,你可能想在開始時添加一些東西,以確保它只匹配一行的開頭......我會現在更新答案... – 2013-02-22 01:02:49

+0

謝謝!這有助於。 – user2085689 2013-02-22 02:02:58