ruby gsub 并像 preg_replace 中那样订购替换品

ruby gsub and ordering replacement like in preg_replace

我有来自 php

的以下功能
pattern = "/^(.+)\/s3\/aws4_request\n.+$/s"
result = preg_replace(pattern,'/s3aws4_request'."\n".$hashedCanonicalRequest, $rawStringToSign);

在ruby

pattern = /^(.+)\/s3\/aws4_request\n.+$/
result = params[:headers].gsub(pattern, "/s3/aws4"+"\n"+hashed)

如何在 gsub 中进行排序?我的意思是那些 $1 和 $ ?你能解释一下吗?

更新完整

Parameters: {"headers"=>"AWS4-HMAC-SHA256\n20180620T172236Z\n20180620/eu-west-2/s3/aws4_request\nPOST\n/65f9a73f-f7f5-4e9e-8e0e-e1c6afaa83c9.jpg\nuploads="}
hashedCanonicalRequest = "test"
pattern_two = /^(.+)\/s3\/aws4_request\n.+$/
stringToSign =  params[:headers].gsub(pattern_two, '/s3/aws4_request'+"\n"+ hashedCanonicalRequest)
# "AWS4-HMAC-SHA256\n20180620T172051Z\n20180620/eu-west-2/s3/aws4_request\ntest\n/65f9a73f-f7f5-4e9e-8e0e-e1c6afaa83c9.jpg\nuploads="

使用 </code> 等替换捕获组:</p> <pre><code>str = 'http://s3.amazonaws.com/prod/s3/aws4_request\nfoo' pattern = /^(.+)\/s3\/aws4_request\n.+$/ str.gsub(pattern, '/s3/aws4'+"\n") # => "http://s3.amazonaws.com/prod/s3/aws4\n"

编辑:

 str = "AWS4-HMAC-SHA256\n20180620T172236Z\n20180620/eu-west-2/s3/aws4_request\nPOST\n/65f9a73f-f7f5-4e9e-8e0e-e1c6afaa83c9.jpg\nuploads="

 pattern =  /^(.+)\/s3\/aws4_request.*/m # .* to capture everythign after aws_request, m for multiline, let's regex scan across \n
 str.gsub(pattern, '/s3/aws4'+"\n")
 #=> "AWS4-HMAC-SHA256\n20180620T172236Z\n20180620/eu-west-2/s3/aws4\n"