Например, текст любоймне, нужно проверить, чтобы скажем 3-4 или любое колво слов есть ли в тексте или нет?
но true нужно получать, только если все кол-во слов присутсвует в тексте.
конструкция вида /Слово1|Слово 2|Слово 3/m
выдает результат при совпадеии любого слова из 3-х в данном случае.
все слова могут быть разбросаны по тексту, но самое главное их последовательность должна тоже быть соблюдена.Никак не сображу!
>[оверквотинг удален]
>
>но 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";
}на произвольное количество слов этот код можно лекго расширить :)
>[оверквотинг удален]
>}
>
>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";
>}
>
>на произвольное количество слов этот код можно лекго расширить :)Спасибо, но момент в том, что именно не фиксированное число слов проверяется, а может быть от 1 и до бесконечности, все зависит от файла-шаблона, где должна была быть записана строка для проверки, что-то типа:
LINE1:REGEXP - слова на проверку
LINE2:слова на проверку, и т.д.Ваш пример годится для фиксированной проверки 3-х слов, сам код переделать можно, но хочется универсальность под любое кол-во слов.
спасибо за ответ.
>Спасибо, но момент в том, что именно не фиксированное число слов проверяется,
>а может быть от 1 и до бесконечности, все зависит от
>файла-шаблона, где должна была быть записана строка для проверки, что-то типа:
>
>LINE1:REGEXP - слова на проверку
>LINE2:слова на проверку, и т.д.
>
>Ваш пример годится для фиксированной проверки 3-х слов, сам код переделать можно,
>но хочется универсальность под любое кол-во слов.
>спасибо за ответ.еще раз извиняюсь я делал так сложно потому предположил что последовательность слов не важна. он не подойдет для вас!
если важна последовательность то все гораздо проще. составить регэксп вообще не проблема добавляете слова и .*, и получайте регэксп.
>конструкция вида /Слово1|Слово 2|Слово 3/m
>выдает результат при совпадеии любого слова из 3-х в данном случае.
>все слова могут быть разбросаны по тексту, но самое главное их последовательность
>должна тоже быть соблюдена.Слово1.*Слово 2.*Слово 3
>>конструкция вида /Слово1|Слово 2|Слово 3/m
>>выдает результат при совпадеии любого слова из 3-х в данном случае.
>>все слова могут быть разбросаны по тексту, но самое главное их последовательность
>>должна тоже быть соблюдена.
>
>Слово1.*Слово 2.*Слово 3ааа, последовательность важна, тогда пардон, не правильно прочитал.
>Слово1.*Слово 2.*Слово 3Огромное всем спасибо!
Вот это я и искал, блин символ между словами как оператор or | лекго
а вот с этой элементарщиной .* проковырялся в нете в поисках инфы вчера до ночи.еще раз все спасибо!