The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Как сделать рерулярное выражения для поиска"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Как сделать рерулярное выражения для поиска"  
Сообщение от Wadimka email(ok) on 01-Ноя-08, 01:26 
Например, текст любой

мне, нужно проверить, чтобы скажем 3-4 или любое колво слов есть ли в тексте или нет?

но true нужно получать, только если все кол-во слов присутсвует в тексте.

конструкция вида /Слово1|Слово 2|Слово 3/m
выдает результат при совпадеии любого слова из 3-х в данном случае.
все слова могут быть разбросаны по тексту, но самое главное их последовательность должна тоже быть соблюдена.

Никак не сображу!

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как сделать рерулярное выражения для поиска"  
Сообщение от NuINu (??) on 01-Ноя-08, 10:12 
>[оверквотинг удален]
>
>но 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";
}

на произвольное количество слов этот код можно лекго расширить :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Как сделать рерулярное выражения для поиска"  
Сообщение от Вадим email(??) on 01-Ноя-08, 10:19 
>[оверквотинг удален]
>}
>
>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-х слов, сам код переделать можно, но хочется универсальность под любое кол-во слов.
спасибо за ответ.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Как сделать рерулярное выражения для поиска"  
Сообщение от NuINu (??) on 01-Ноя-08, 10:35 

>Спасибо, но момент в том, что именно не фиксированное число слов проверяется,
>а может быть от 1 и до бесконечности, все зависит от
>файла-шаблона, где должна была быть записана строка для проверки, что-то типа:
>
>LINE1:REGEXP - слова на проверку
>LINE2:слова на проверку, и т.д.
>
>Ваш пример годится для фиксированной проверки 3-х слов, сам код переделать можно,
>но хочется универсальность под любое кол-во слов.
>спасибо за ответ.

еще раз извиняюсь я делал так сложно потому предположил что последовательность слов не важна. он не подойдет для вас!
если важна последовательность то все гораздо проще. составить регэксп вообще не проблема добавляете слова и .*, и получайте регэксп.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "герулягного выгажение"  
Сообщение от Andrey Mitrofanov on 01-Ноя-08, 10:29 
>конструкция вида /Слово1|Слово 2|Слово 3/m
>выдает результат при совпадеии любого слова из 3-х в данном случае.
>все слова могут быть разбросаны по тексту, но самое главное их последовательность
>должна тоже быть соблюдена.

Слово1.*Слово 2.*Слово 3

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "герулягного выгажение"  
Сообщение от NuINu (??) on 01-Ноя-08, 10:32 
>>конструкция вида /Слово1|Слово 2|Слово 3/m
>>выдает результат при совпадеии любого слова из 3-х в данном случае.
>>все слова могут быть разбросаны по тексту, но самое главное их последовательность
>>должна тоже быть соблюдена.
>
>Слово1.*Слово 2.*Слово 3

ааа, последовательность важна, тогда пардон, не правильно прочитал.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "герулягного выгажение"  
Сообщение от Вадим email(??) on 01-Ноя-08, 11:32 
>Слово1.*Слово 2.*Слово 3

Огромное всем спасибо!
Вот это я и искал, блин символ между словами как оператор or | лекго
а вот с этой элементарщиной .* проковырялся в нете в поисках инфы вчера до ночи.

еще раз все спасибо!


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру