$re = '/(?P<protocol>\w+)\s*request\s*from\s*(?P<source_address>\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}):(?P<source_port>\d+)\s*to\s*(?P<destination_address>\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}):(?P<destination_port>\d+).\s*Action:\s*(?P<action>\w+).\s*Rule\s*Collection:\s*(?P<rule_collection>[^\s.]+).\s*Rule:\s*(?P<rule>[^\s}]+)/m';
$str = 'UDP request from 20.0.1.42:34315 to 8.8.8.8:53. Action: Allow. Rule Collection: wfx-us-east-prod-allow-internet. Rule: allow-internet
TCP request from 162.158.79.116:45646 to 52.191.237.198:443 was DNAT\'ed to 20.0.1.28:443. Rule Collection: wfx-us-east-prod-nat-rules. Rule: collector-02}}';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 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