in reply to Regex help

Input data do not seem to be a valid HTML.

<h3> <table><tr>BBBBB 01/08/2018 </h3> # </H3> is nested insi +de the table <td>236</td><td>002</td><td>121</td> <td>266</td></tr> </table>

With that out of the way... This is how you could do it using Mojo::DOM.

use strict; use warnings; use Mojo::DOM; use Data::Dumper; use feature qw/say/; my $input = join '', map { $_ } <DATA>; my $dom = Mojo::DOM->new($input); my @results; for my $h3 ($dom->find('h3')->each) { # skip everything but the heading we are after next unless $h3->all_text =~ /^\s* BBBBB \s+/ix; # assume that immediately after the heading we have the table we a +re interested in my $table = $h3->following->first; $table->find('td')->each( sub { push @results, $_->all_text} ); } say Dumper \@results; __DATA__ <h3>AAA 28/07/2018</h3> <table><tr><td>1351</td><td>990</td><td>783</td><td>523</td></tr></tab +le> <h3>BBBBB 01/08/2018</h3> <table><tr><td>236</td><td>002</td><td>121</td><td>266</td></tr></tabl +e> <h3>KK K P 25/07/2018</h3> <table><tr><td>200</td><td>3345</td><td>667</td><td>137</td></tr></tab +le>