use strict;
my $str = '{"repoType":3,"repo":"DEV01_hive","reqUser":"na230292","evtTime":"2018-05-07 07:29:16.765","access":"ALTER","resource":"stg_hr_erp_hr_erpprod/hr_dm_application_groups","resType":"@table","action":"alter","result":1,"policy":695,"enforcer":"ranger-acl","sess":"ce536988-846d-47d2-a9dc-40e88c9c3e1a","cliType":"HIVESERVER2","cliIP":"149.25.76.150","reqData":"msck repair table stg_hr_erp_hr_erpprod.hr_dm_application_groups","agentHost":"rpc11743.corp.ncr.com","logType":"RangerAudit","id":"358f75d9-8423-49e1-bd3e-3cc795cccf2e-25620","seq_num":51241,"event_count":1,"event_dur_ms":0,"tags":[blah],"additional_info":"{\\"remote-ip-address\\":149.25.76.150, \\"forwarded-ip-addresses\\":[]","cluster_name":"DEV01"}
';
my $regex = qr/"repoType":(.*?)"repo":(.*?),|"resType":(.*?),|"result":(.*?),|"policy":(.*?),|"enforcer":(.*?),|"sess":(.*?),|"cliType":(.*?),|"reqData":(.*?),|"agentHost":(.*?),|"logType":(.*?),|"id":(.*?),|"seq_num":(.*?),|"event_count":(.*?),|"event_dur_ms":(.*?),|"tags":(.*?),|"additional_info":|"{(.)(?!$)/mp;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
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 Perl, please visit: http://perldoc.perl.org/perlre.html