我想檢查我的URL格式是正確的,它有一些AWS ACCES鍵等:正則表達式來檢查URL格式
/https://bucket.s3.amazonaws.com/path/file.txt?AWSAccessKeyId=[.+]&Expires=[.+]&Signature=[.+]/.match(url)
^這樣的事情。能否請你幫忙?
我想檢查我的URL格式是正確的,它有一些AWS ACCES鍵等:正則表達式來檢查URL格式
/https://bucket.s3.amazonaws.com/path/file.txt?AWSAccessKeyId=[.+]&Expires=[.+]&Signature=[.+]/.match(url)
^這樣的事情。能否請你幫忙?
我們需要一個URL一起工作:
url = "/https://bucket.s3.amazonaws.com/path/file.txt?AWSAccessKeyId=somestuff&Expires=somemorestuff&Signature=evenmorestuff"
我們還需要逃脫了一堆東西,做一些非貪婪匹配(+?):
/https:\/\/bucket.s3.amazonaws.com\/path\/file\.txt\?AWSAccessKeyId=.+?&Expires=.+?&Signature=.+/.match(url)
=> #<MatchData "https://bucket.s3.amazonaws.com/path/file.txt?AWSAccessKeyId=somestuff&Expires=somemorestuff&Signature=evenmorestuff">
URI RFC指定此正則表達式解析URL和URI:
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
您也可以使用URI module在Ruby標準庫:
require 'uri'
if url =~ /^#{URI::regexp(%w(http https))}$/
puts "it's an url alright"
else
puts "that's no url, that's a spaceship"
end
要檢查的「一些AWS訪問鍵等」的存在,你可以這樣做:
require 'uri'
uri = URI.parse(url)
params = URI.decode_www_form(uri.query).to_h
if params.has_key?('AWSAccessKeyId')
unless params['AWSAccessKeyId'] =~ /\A[a-f0-9]{32}\z/
abort 'AWSAccessKeyId not valid'
end
else
abort 'AWSAccessKeyId required'
end
當然你可以用正則表達式來直接解析它們,但它變得醜陋,因爲參數的順序可能會有所不同:
>> url = "https://bucket.s3.amazonaws.com/path/file.txt?AWSAccessKeyId=abcd12345&Expires=12345678&Signature=abcd"
>> matchdata = url.match(
/
\A
(?<scheme>http(?:s)?):\/\/
(?<host>[^\/]+)
(?<path>\/.+)\?
(?=.*(?:[\?\&]|\b)AWSAccessKeyId\=(?<aws_access_key_id>[a-f0-9]{1,32}))
(?=.*(?:[\?\&]|\b)Expires=(?<expires>[0-9]+))
/x
)
=> #<MatchData "https://bucket.s3.amazonaws.com/path/file.txt?"
scheme:"https"
host:"bucket.s3.amazonaws.com"
path:"/path/file.txt"
aws_access_key_id:"abcd12345"
expires:"12345678">
>> matchdata[:aws_access_key_id]
# => "abcd12345"
它使用
(?=..)
忽略參數 爲了(?<param_name>.*)
識別 的PARAMS從比賽數據(?abcd|efgh)
(?[\&\?]|\b)
處理Expires=...
,?Expires=...
或&Expires=...
/x
自由間距修改器改爲 允許更好的格式在地球上如何檢查「它有一些AWS acces鍵等」? – mudasobwa
@mudasobwa現在它。 –
搜索:[url正則表達式](http://stackoverflow.com/search?q=url+regex) – Tushar