ruby gsub和订购替换,如preg_替换

ruby gsub和订购替换,如preg_替换,ruby,regex,gsub,Ruby,Regex,Gsub,我有以下来自php的函数 pattern = "/^(.+)\/s3\/aws4_request\\n.+$/s" result = preg_replace(pattern,'$1/s3aws4_request'."\n".$hashedCanonicalRequest, $rawStringToSign); 红宝石色 pattern = /^(.+)\/s3\/aws4_request\\n.+$/ result = params[:headers].gsub(pattern, "$1/s

我有以下来自php的函数

pattern = "/^(.+)\/s3\/aws4_request\\n.+$/s"
result = preg_replace(pattern,'$1/s3aws4_request'."\n".$hashedCanonicalRequest, $rawStringToSign);
红宝石色

pattern = /^(.+)\/s3\/aws4_request\\n.+$/
result = params[:headers].gsub(pattern, "$1/s3/aws4"+"\n"+hashed)
如何在gsub中进行订购?我是说那1美元和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, '\1/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="

使用
\1
等替换已使用的捕获组:

str = 'http://s3.amazonaws.com/prod/s3/aws4_request\nfoo'
pattern = /^(.+)\/s3\/aws4_request\\n.+$/
str.gsub(pattern, '\1/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, '\1/s3/aws4'+"\n")
 #=> "AWS4-HMAC-SHA256\n20180620T172236Z\n20180620/eu-west-2/s3/aws4\n"

如果是ruby,请使用
\1
等<代码>“kiddorails”.gsub(/(kid)do.*/,“\1Ruby”)#=>“kidoruby”谢谢它可以工作,但我的regexp并不完美。我想替换最后一个匹配项,而不是附加其余项。我的意思是,我有一个
str=asdasdasd/s3/aws4\u请求\n更多的东西
,我想用这个
\1/s3/aws4
+“\n”`来代替它,但不附加
SomethingMore
SomethingMore
并没有像你们在我的回答中的例子中看到的那样附加。您能给出更明确的示例字符串、模式和期望值吗?@hodiecode更新了我的答案,以反映您应该使用的正确正则表达式。非常感谢。我想做的是将其转换为ruby
$stringToSign=preg\u replace(“/^(+)\/s3\/aws4\u request\\n.+$/s”,“$1/s3/aws4\u request”。“\n”。$hashedCanonicalRequest,$rawStringToSign)
在aws4\u请求之后,它应该会发生变化。那么为什么这里是操作员
/s
而不是
/m
谢谢kiddorails耐心地解释一切!!