#!/usr/bin/perl use warnings; use strict; use feature qw{ say }; for my $string ( '?!?!?!/pack/something/whatever.cacshdska', '!2!ab!!!!/pack/something/whatever.cacshdska', ) { my ($before, $after) = $string =~ m{(.*)..\W/.*\.c(.*)}; say "$before | $after"; }