use strict;
my $str = '130 (UID 1245 BODYSTRUCTURE ((("TEXT" "PLAIN" ("CHARSET" "UTF-8") NIL NIL "QUOTED-PRINTABLE" 847 17 NIL NIL NIL)("TEXT" "HTML" ("CHARSET" "UTF-8") NIL NIL "QUOTED-PRINTABLE" 2009 41 NIL NIL NIL) "ALTERNATIVE" ("BOUNDARY" "000000000000929e4505d59042b1") NIL NIL)("IMAGE" "JPEG" ("NAME" "BS_01.jpg") "<f_kyetquhw1>" NIL "BASE64" 280364 NIL ("ATTACHMENT" ("FILENAME" "BS_(01)_a.jpg")) NIL)("IMAGE" "PNG" ("NAME" "payroll_check_top_format.png") "<f_kyetquio3>" NIL "BASE64" 498210 NIL ("ATTACHMENT" ("FILENAME" "payroll check top format.png")) NIL)("IMAGE" "JPEG" ("NAME" "missouri_dl_3e_1300x884.jpg") "<f_kyetquia2>" NIL "BASE64" 1014040 NIL ("ATTACHMENT" ("FILENAME" "missouri_dl_3e_1300x884.jpg")) NIL)("IMAGE" "JPEG" ("NAME" "1040-1-1_N.jpg") "<f_kyetquhj0>" NIL "BASE64" 4272596 NIL ("ATTACHMENT" ("FILENAME" "1040-1-1_N.jpg")) NIL) "MIXED" ("BOUNDARY" "000000000000929e4705d59042b3") NIL NIL))';
my $regex = qr/("FILENAME" "([^\/:*?"<>|]+)")/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