#!/usr/bin/perl -w use strict; my ($firstQ, $firstS); my ($lastQ, $lastS); while (!(defined($firstQ) && defined($firstS))) { $_=<>; $firstQ=$1 if(/^Query:\s+?(\d+)[\sgcat]*(\d+)/) && do{$lastQ=$ +2}; $firstS=$1 if(/^Sbjct:\s+?(\d+)[\sgcat]*(\d+)/) && do{$lastS=$ +2}; } while(<>) { $lastQ=$2 if (/^Query:\s+?(\d+)[\sgcat]*(\d+)/); $lastS=$2 if (/^Sbjct:\s+?(\d+)[\sgcat]*(\d+)/); } print "First:\t$firstQ\t$firstS\n"; print "Last:\t$lastQ\t$lastS\n"; ## Output of large dataset: ############# First: 11 1 Last: 370 360 ## Output of small dataset: ############# First: 249 64265 Last: 271 64243
Code works with both a single data item or multiple data items spread across several lines. Now you can make the regexes in the second while loop more efficient by taking out the first capturing parentheses but I wanted to keep them the same as the first while loop so you could see the symmetry and what I was doing with the regex.
HTH
In reply to Re: Regex perplexity
by pzbagel
in thread Regex perplexity
by eweaverp
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |