2017-10-06 6 views
4

私はPCAPファイルを検索している状況を解決する方法を考え出しています。私はヘッダ "Content-Type:。*"をHTTP OK応答の後に探しています。しかし、このような例では:X-Content-Type: aadsfでキャプチャグループを停止し"HTTP\/1.1 200 OK[\s\S]*?Content-Type:.*"Regex Skipping Similar Result

HTTP/1.1 200 OK 
date: 
asdf 
X-Content-Type: aadsf 
Content-Type: application/json 
more: stuff 

HTTP/1.1 200 OK 
date: 
asdf 
X-Content-Type: aadsf 
Content-Type: application/json 
more: stuff 

私の現在の正規表現。私の意図はContent-Type: application/jsonに行く正規表現のキャプチャグループです。

私にいくつかのポインタを与えることができる任意の正規表現ウィザード?

+0

ここではどの言語を使用していますか? – Jan

答えて

2

PCRE正規表現は

あるregex demoを参照してください。さらに効率を上げたい場合は、replace the first .+ with .++。簡単にキャプチャグループで使用するために再書かれたと言う(CR)LF終了することがあります?m複数行修飾子はラインの^試合開始は依然として必要になることがあります作るために

^HTTP.*(?:\r?\n.+)*?\r?\nContent-Type:\s*(.+) 

注こと。

詳細

  • ^ - ライン
  • HTTPの開始 - サブ
  • .* - ラインの残り
  • (?:\R.+)*? - 任意の0+、できるだけ少ないなど行中断のシーケンス(\Rまたは\r?\n)、改行以外の1文字以上の文字列
  • \R - ラインブレーク
  • Content-Type: - リテラルストリング
  • \s* - 0+空白
  • \K - マッチリセットオペレータ現在の一致値からこれまでにマッチしたすべてのテキストを破棄
  • .+から1又は改行以外の文字が多い
+0

非常に良い(+1)、これは劇的に鉱山に比べてステップを減らします。 – Jan

0

ここでは両方のコンテンツタイプをキャプチャする正規表現^((?:X-)?Content-Type):(.*)$です。または、1つの追加のコンテンツタイプの後に停止する場合は、の前に\n(改行)を追加するだけです。

1

あなたは

^HTTP    # match HTTP at the start of the line 
(?s:(?!^$).)+? # anything lazily, do not overrun an empty newline 
^Content-Type:\s* # Content-Type: at the start of a line 
(?P<type>.+)  # capture the type 

a demo on regex101.comを参照してくださいを使用することができます。あなたが使用することのない前後参照