I know the OP had the word boundry match at the end, but I don't see its use here. Neither do I see the need for a non capturing group. Either way, the OP should probably positively match for the end of the file name, otherwise one might end up passing a file by virtue of a match part way through the filename.
The following wont print match...
my $filename = "/home/root/this_is_a_valid_name.html.gz";
if ($filename =~ m/(\.(htm|html|txt|pdf|ppt|csv|doc))$/i) {
print "match\n"; # this won't print
}
... however swap in the this one, and is passes just fine...
my $filename = "/home/root/this_is_a_valid_name.html.gz";
if ($filename =~ /(\.(?:htm|html|txt|pdf|ppt|csv|doc]))\b/i) {
print "match\n"; # this will print
}
---
my name's not Keith, and I'm not reasonable.