[.]? #### #!/usr/bin/perl use warnings; use strict; use experimental qw( signatures ); sub match($entry) { $entry =~ m{^ (\d+) [.]? \s+ (.*?) \s+(-|\N{EN DASH}|\N{EM DASH})\s+ (.*?) $}x; } use Test::More tests => 3; ok match('123 Festival - Sunday'); ok match('456. Pool Party - Tuesday'); ok ! match('789| Gig - Friday');