2011-02-08 22 views
1

クライアントのブラウザからHTTP "Via"タグを解析する際に問題があります。 これは私が得たHTTPヘッダの例です:Regex-match HTTP経由のタグ

GET/HTTP/1.0 
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, */* 
Accept-Language: sr-Latn-RS 
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MATM; AskTbGOM2/5.8.0.12304) 
Accept-Encoding: gzip, deflate 
Host: 10.0.1.7 
Via: 1.1 smtp.local:3128 (squid/2.6.STABLE21) 
X-Forwarded-For: 10.0.0.75 
Cache-Control: max-age=259200 
Connection: keep-alive 

は今、私はこのヘッダからsmtp.local:3128一部を取得する必要がありますが、私が書いた正規表現は動作しません。 C#(doesntの仕事)に書き込ま

例パターン:

string matchHttpVia = @"Via: 1.1 (\.+:\d+)"; 

も注意IPの代わりにホスト名が存在することができました。

+0

なぜ最初のドットをバックスラッシュしますか? '/ Via:1.1(。*:\ d +)/'はうまくいくでしょうか? – Konerak

答えて

2

'バージョン'、ホスト、ポートの

0

Konerakがコメントしたように、ドットの前にバックスラッシュを付けると、Via: 1.1 (.*:\d+)に問題が解決するはずです。 \.は、リテラルドット文字にのみ一致し、.は任意の文字に一致します。

「1.1」が「Via:」とホスト名/ IPの間に現れる唯一のものである場合にのみ有効です。それが安全な前提かどうかを知るために私はHTTPヘッダーについて十分に知りませんが、そうでないかもしれないようです。 XXホスト:あなたは正規表現を使用することができますポート:

Via: \d+\.\d+ (.*:\d+) (\(.*\))? 

また、これは実際には十分なものでなければならない:

すべての可能な場合のためにトリックを行う必要があります
Via: \d+\.\d+ (.*:\d+) 

経由を解析するために

+0

これはRFC標準によってのみ可能です: 経由:x.xホスト:ポート –

+1

その場合、おそらく '経由:\ d。\ d(。*:\ d +)'が適切でしょう。 – histumness

関連する問題