>[оверквотинг удален]
>
>но true нужно получать, только если все кол-во слов присутсвует в тексте.
>
>
>конструкция вида /Слово1|Слово 2|Слово 3/m
>выдает результат при совпадеии любого слова из 3-х в данном случае.
>все слова могут быть разбросаны по тексту, но самое главное их последовательность
>должна тоже быть соблюдена.
>
>Никак не сображу! возможно это и решается чистым регэкспом, но на мой взгляд проще решить так:
my $name_f = shift || { usage() && exit()};
my $w1 = shift || { usage() && exit()};
my $w2 = shift || { usage() && exit()};
my $w3 = shift || { usage() && exit()};
open(F, '<', $name_f);
my @lines = <F>;
close(F);
my ($is_w1, $is_w2, $is_w3);
$is_w1 = $is_w2 = $is_w3 = 0;
LINE_CYCLE: foreach my $l (@lines) {
while($l =~ m/($w1|$w2|$w3)/g) {
if($1 eq $w1) {
$is_w1++;
} elsif ($1 eq $w2) {
$is_w2++;
} elsif ($1 eq $w3) {
$is_w3++;
} else {
print "in line '$l' find unknown '$1' :)\n";
}
last LINE_CYCLE if($is_w1 && $is_w2 && $is_w3);
}
}
if($is_w1 && $is_w2 && $is_w3) {
print "Successfully find words!: $w1($is_w1), $w2($is_w2), $w3($is_w3)\n";
} else {
print "sorry combination this word in text NOT FIND\nOnly find:$w1($is_w1), $w2($is_w2), $w3($is_w3)\n";
}
на произвольное количество слов этот код можно лекго расширить :)