ruby gsub和订购替换,如preg_替换
我有以下来自php的函数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
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耐心地解释一切!!