use strict;
my $str = '<table width="100%"><tr><td valign="top" width="80">
<b>wo 1 februari</b>
</td>
<td>
<table width="100%"><tr class="spits-dagdeel spits-Ochtend"><td valign="top" width="60">
<i>Ochtend</i>
</td>
<td>
<p class="spits-2">lichte spits (2)
</p>
<p>De eerste dag van de nieuwe maand, woensdag. Tijdens de ochtend is het vaak rustig op de wegen en dat zal ook nu het geval zijn. We verwachten op het drukste moment niet meer dan 150 kilometer file op de snelwegen.</p>
<p class="spits-klasse"> Bij een lichte spits wordt tot 150 km verwacht. De normale knelpunten hebben files.
</p>
</td>
</tr><tr class="spits-dagdeel spits-Avond"><td valign="top" width="60">
<i>Avond</i>
</td>
<td>
<p class="spits-3">reguliere spits (3)
</p>
<p>Deze spits iets meer drukte dan tijdens de ochtendspits, maar dat is vrij gebruikelijk. We verwachten geen bijzonderheden. Alleen bij ongelukken kunnen files snel in lengte toenemen.</p>
<p class="spits-klasse"> Bij een reguliere spits wordt tot 225 km verwacht. Alle knelpunten hebben files.
</p>
</td>
</tr></table></td>
</tr></table>';
my $regex = qr/<i>(?<date>.*)|<p class="spits-[0-9]+">.*(?<intensity>[0-9]+)|<p>(?<description>[\w ,\.:'"]+)|<p class="spits-klasse">(?<default>[\w ,\.:'"]+)/p;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html