2013-02-22 76 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