我一直试图想出办法来解决我在PCAP文件中搜索的问题。我正在寻找标题" Content-Type:。*"在HTTP OK响应之后。但是,在这样的例子中:
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
我当前的正则表达式"HTTP\/1.1 200 OK[\s\S]*?Content-Type:.*"
会停止X-Content-Type: aadsf
处的捕获组。我的目的是使用正则表达式捕获组转到Content-Type: application/json
。
任何可以给我一些指示的正则表达式向导?
答案 0 :(得分:2)
您可能使用的没有外观的PCRE正则表达式是
(?m)^HTTP.*(?:\R.+)*?\RContent-Type:\s*\K.+
请参阅regex demo。如果您想提高效率,replace the first .+
with .++
。可以很容易地重写它以便与捕获组一起使用并说出(CR)?LF结束:
^HTTP.*(?:\r?\n.+)*?\r?\nContent-Type:\s*(.+)
请注意,m
多线修改器可能仍然需要使^
匹配线的起点。
<强>详情:
^
- 开始行HTTP
- 子字符串.*
- 其余部分(?:\R.+)*?
- 任意0+,尽可能少的换行符序列(\R
或\r?\n
)后跟一个或多个换行符而不是换行符\R
- 换行符Content-Type:
- 文字子字符串\s*
- 0+ whitespaces \K
- 匹配重置运算符,丢弃与当前匹配值匹配的所有文本.+
- 换行符以外的一个或多个字符。答案 1 :(得分: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
答案 2 :(得分:0)
这是正则表达式^((?:X-)?Content-Type):(.*)$
,它捕获两种内容类型。或者只是在\n
之前添加Content-Type
(换行符),如果您希望在一个额外的内容类型之后停止它。