use strict; use warnings; my $text = "{{\\escape\\sequences \\more\\sequences{\\yet\\more}\\again\\some\\more\\sequences Some Data}{\\foo\\bar Some Other Data}}"; while ($text =~ /\G([{}])/g) { print "Token: '$1'\n"; if ($text =~ /\G([^{}]*)/g) { my $chunk = $1; while ($chunk =~ /(\S+|\s+)/g) { print "Token: '$1'\n"; } } }