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

我的意图是到达“Host:”,我不关心 User-Agent: 行,那么我如何跳过 User-Agent 行并移动到 Host: ?到目前为止我尝试过的表达方式非常无用,

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

我知道这User-Agent:\\s+.*?不是我们跳过这条线的方式,但我不知道该怎么做,有什么帮助吗?

4

1 回答 1

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 需要显式添加它们)
  • 添加start marker( ^) 正则表达式的开头,因此它仅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...
于 2013-02-22T00:39:09.243 回答