in reply to Regex Question

Ok, I ended up figuring out the rest. It was a bunch of problems together. I had line breaks in the text, and get_trimmed_text was taking out
tags and goofing up all sorts of stuff. Here's the solution I ended up with. Let me know if you have better ideas! Thanks for the help!!!

$svcDesc = $htmlStream->get_phrase('/td'); $svcDesc =~ s/\n/,/g; push @svcPorts, "$1:$2" while ($svcDesc =~ /Protocol:\s(TCP|UDP).+?Des +tination\sPort:\s([0-9\-]+)/g); s/:(\d+)\-\1/:$1/ for (@svcPorts);

Replies are listed 'Best First'.
Re^2: Regex Question
by hdb (Monsignor) on Sep 10, 2013 at 20:07 UTC

    I would prefer to split into lines first and then extracting the data:

    use strict; use warnings; my $cell = <<EOT; 1. Network-Time, Protocol: TCP, Source Port: 0-65535, Destination + Port: 13-13 2. Network-Time-1, Protocol: UDP, Source Port: 0-65535, Destination Po +rt: 13-13 3. Network-Time-2, Protocol: TCP, Source Port: 0-65535, Destination Po +rt: 37-37 4. Network-Time-3, Protocol: UDP, Source Port: 0-65535, Destination Po +rt: 37-37 5. Network-Time-4, Protocol: UDP, Source Port: 0-65535, Destination Po +rt: 123-123 EOT my @svcDesc = map { s/.*(TCP|UDP).*?Destination Port: ([0-9]+).*/$1:$2 +/; $_ } split /\n/, $cell; print "@svcDesc\n";