$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": "-"}
';
preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);
// Print the entire match result
var_dump($matches);
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 PHP, please visit: http://php.net/manual/en/ref.pcre.php