re = /^\[(?<log_time>[^\]]*)\] (?<log_level>[^ ]*) \[(?<log_id>[^ ]*)\] (?<log_req>[^ ]*) (?<log_stash>[^ ]*) (?:[^ ]* \")(?<log_ip>[^ ]*)\"\, (?:[^ ]* \")(?<log_user>[^ ]*)\"\, (?:[^ ]* \")(?<log_method>[^ ]*) (?<log_url>[^ ]*) (?<log_httpver>[^ ]*)\, (?:[^ ]* \")(?<log_response_status>[^ ]*)\"\, (?:[^ ]* \")(?<log_response_bytes>[^ ]*)\"\, (?:[^ ]* \")(?<log_referer>[^ ]*)\"\, (?:[^ ]* )\"(?<log_user_agent>.*?[^\\])\"\, \"(.*?[^\\])\"\: \"(?<log_device>.*?[^\\])\"\, \"(.*?[^\\])\"\: \"(?<log_locale>.*?[^\\])\"\}/m
str = '[2022-10-18 07:57:29,897 +0000] INFO [qtp698784309-26] RequestLog: - {"address": "127.0.0.1", "user": "-", "request": "GET /op/123 HTTP/1.1", "response_status": "200", "response_bytes": "321", "referer": "-", "user_agent": "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)", "device_type": "-", "locale": "-"}
'
# Print the match result
str.match(re) do |match|
puts match.to_s
end
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Ruby, please visit: http://ruby-doc.org/core-2.2.0/Regexp.html