in reply to Problems counting regex matches
"...this is beyond my abilities at this point..."
Scale the problem back to your actual abilities and start from there. If you are confused by complex regular expressions (like I often am), break the problem down into simpler ones until you are more familiar (note: this example only finds words that are near but appear after your search term):
use strict; =pod ...if either revenue(s), sales or growth occur within three words of +the word currency or the phrase "foreign exchange." =cut my @sources = ('foreign exchange','currency'); my $sourceData = <<EOF; foreign exchange revenue wordiness happycat smiles currency revenue world cat blue runny a nice happy foreign exchange said that revenues would be up the day I last visited my foreign exchange they said revenues were goo +d wow currency makes good growth when currency came revenues dipped EOF my %searchvector = map {$_=>$_} qw|revenue sales growth|; my $cntFound = 0; for (@sources) { while($sourceData=~m/$_\s+(\w+)\s*(\w+)?\s*(\w+)?\s*/g) #does the w +ord appear? { # is anything in the searchvector in the found words? for ($1,$2,$3) { my $r = $_; $r=~s/revenues/revenue/; if($searchvector{$r}){++$cntFound}; } } } print qq|Total times search (| . (join ' ', (values %searchvector)) . +') found: ' . $cntFound . qq|\n|; 1;
Total times search (growth sales revenue) found: 6
Celebrate Intellectual Diversity
|
|---|