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 に答える