my ($start, $end); my $res = $str =~ m{ ^.{$pos} \d ( (?<= (?= (?: \D | ^ ) (?{$start = pos}) | (?1)) . ) ) (\d*)(?{$end = pos}) }x ? substr($str, $start, $end - $start) : undef ;