我的数据格式如下。我需要删除<s:Envelope
之前显示的所有数据。
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Fri, 05 May 2017 09:52:02 GMT
Content-Length: 338962
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body><RetrieveStoredRoutesResponse xmlns="http://schema.website.com">
如何使用正则表达式执行此操作?
答案 0 :(得分:1)
这看起来像一个HTTP响应流,您只需要HTTP响应体。一般来说,正文可能不一定以<s:Envelope
开头。要获取正文,您需要剥离HTTP标头。标题是一系列非空行,后跟一个空行,第一行以HTTP
开头。用于删除标头的Perl正则表达式替换运算符是
s/\A(?:^HTTP.*?(?:^.+$)*^$)+//sm;
在这个正则表达式中:
\A
匹配整个输入的开头(请注意,此处使用^
来匹配自使用/m
以来新行的开头)(?:
- 外部非捕获组的开始。该组匹配单个HTTP标头块
^
- 开始行HTTP
- HTTP
字面意思.*?
- 任何非贪婪方式的文字(由于以下^
而有效地延续到行尾)(?:
- 内部非捕获组的开始。该组匹配单个非空行
^
- 开始行.+
- 一个或多个字符(即非空行)$
- 行尾)
- 内部非捕获组的结束。*
- 重复该组(非空行)零次或多次)
- 外部非捕获组的结束。+
- 重复一次(HTTP标头块)一次或多次Perl演示:https://ideone.com/LEPpkQ