#!/usr/bin/perl use strict; use warnings; $/ = undef; my $string = ; while ($string =~ /( # Capture into $1 ^U\d+\.\d # A 'U' at the start of a line, and 2 # dot-separated numbers ) \n\n # 2 newlines ( # Capture into $2 (?: [^\n] # Match anything but a newline | # or \n(?!\n) # A newline, but only if not followed # by another newline )+ ) /mgx) { print "\$1: <$1>:\n\$2: \n<$2>\n\n"; } __DATA__ U448.1 Several walls of the imperial city of Constantinople which had been freshly rebuilt with masonry, and fifty-seven towers collapsed as a result of a violent earthquake which prevailed in various places. U483.2 Or, this year the battle of Ocha according to others, won by Muirchertach Mac Erca and by Fergus Cerball son of Conall of Cremthann, and by Fiachra Lon son of the king of Dal Araide.