簡體   English   中英

如何從 ruby​​ 中的多行字符串獲取從第 n 行到最后一行的數據?

[英]How to get the data from line number n to last line from a multi-line string in ruby?

我正在 ruby​​ 中執行以下 curl 請求:

cmd="curl --silent --insecure -i -X GET -u \"local\username:password\" \"https://example.com/Console/Changes\""
response = `cmd`

它導致以下輸出:

在此處輸入圖片說明

從上面的輸出看來,響應變量包含一個多行字符串值。 只是為了確認,我試圖在此處打印“響應”變量的類型:

puts response.class

這里的輸出是:

細繩

如何從上述響應中分別提取標頭信息和 json 正文?

在 Ruby 中有更好的方法來處理 HTTP 請求,例如使用標准庫的Net::HTTP

說了這么多,我來回答你的問題。

HTTP 標准指定標頭和正文由僅包含 CRLF ( \\r\\n ) 的空行分隔。 標題的每一行也以 CRLF 結尾。 因此,我們可以簡單地在第一次出現兩個 CRLF 時拆分響應,即在字符串"\\r\\n\\r\\n"

由於這個序列也可能出現在正文中,我們需要指定我們希望我們的拆分最多有 2 個元素。

header, body = response.split("\r\n\r\n", 2)

請注意,盡管如此,最后的標題行不會以"\\r\\n"結尾,但這應該不是問題。 技術上更正確的版本是在"\\r\\n"后跟一個"\\r\\n"處拆分。 這樣我們就不會在拆分時去掉尾隨的"\\r\\n" 這可以通過使用后視的正則表達式來完成:

header, body = response.split(/(?<=\r\n)\r\n/, 2)

不過,您在標題中的問題的答案有點不同:

如何從 ruby​​ 中的多行字符串獲取從第 n 行到最后一行的數據?

response.lines[n..].join

(在 Ruby 2.6 之前,范圍需要指定為n..-1 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM