Хорошо, чтобы написать свое регулярное выражение, вам нужно найти все эти пары some_variable=some_data
.
Вот как вы можете это сделать:
/\S*=\S*/ #
\S* # match any non-whitespace-character, 0-n times
= # match the equal sign
\S* # match any non-whitespace-character, 0-n times
Это будет соответствовать парам. Для извлечения данных вы используете группы захвата.
Вы заключаете то, что хотите извлечь в скобки (xxx)
, для имени переменной и значения.
/(\S*)=(\S*)/
(\S*) # capture the name
(\S*) # capture the value
Таким образом, для каждой строки журнала вы можете сделать:
line_of_log.scan(/(\S*)=(\S*)\s/)
Чтобы увидеть, что происходит, и для создания регулярных выражений, я рекомендую всегда пробовать его с помощью такого инструмента, как https://regex101.com/,, который действительно помогает понять, что происходит.
Это вернет массив массивов, подобных этому:
[["at", "info"],
["method", "POST"],
["path", "/api/online/platforms/facebook_canvas/users/100002266342173/add_ticket"],
["host", "services.pocketplaylab.com"],
["fwd", "\"94.66.255.106\""],
["dyno", "web.12"],
["connect", "12ms"],
["service", "21ms"],
["status", "200"],
["bytes", "78"]]
Нет, вы можете перебирать массив и создавать какой-то объект или хеш для работы.
scanresult.inject({}) do |obj, pair|
obj[pair[0].to_sym] = pair[1]
obj
end