Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Использование regexp


Автор: Гость_Alex 17.5.2005, 13:02
Всем привет!

У меня тут возникла задача:
есть строка, и в ней есть слово "pussy" (например). Нужно выделить из етой строки подстроку, которая была бы словом "pussy" плюс N слов (вариант: N символов) до и после етого слова.
т.е.:

my $base_string = "Mary had a very, very, very big pussy. It is a big black cat. Maybe.";

если N=3, результат:

very, very big pussy. It is a

Подскажите, please, как ето сделать, а то у меня пока не получаеться... smile smile


Автор: korob2001 18.5.2005, 00:36
Не знаю насколько правильно я тебя понял, но может этот пример тебе поможет:
Код

#!/usr/bin/perl -w
use strict;
my $bef = 4; # Кол-во слов до искомого слова
my $aft = 4; # Кол-во слов после искомого слова
my $str = "Mary had a very, very, very big pussy. It is a big black cat. Maybe.";
my( $sub_str ) = $str =~ /((?:\w+?(?:\,|\.)?\s*?){$bef}(?:\bpussy\b)(?:\.+?)?(\s*?\w+?.?){$aft})/i;
print $sub_str;

Удачи, но этот шаблон расчитан на эту строку, для того, что бы он работал со всеми строками, его нужно немного доработать.

Удачи.

Автор: Guest 19.5.2005, 16:32
Спасибо тебе, korob2001, огромное!! Ты правильно все понял!

Жаль только Твой шаблон действительно не универсален smile . Ты не мог бы подсказать как к нему лучше подступиться, чтобы внести коректировку, а то он такой большой и страшный smile ? Ты до и после (?:\bpussy\b) написал разный код. Я про (?:\,|\.) Ето как-то связано з той строкой, что я написал (ну там про pussy...) или таким же будет и универсальный шаблон? Лучше работает выделение слов до ключевого слова, чем после.

Ты извини если вопрос очень тупой...

Автор: korob2001 19.5.2005, 20:19
Цитата

Я про (?:\,|\.) Ето как-то связано з той строкой, что я написал (ну там про pussy...) или таким же будет и универсальный шаблон?

Верно мыслишь.

Попробуй так:
Код

#!/usr/bin/perl -w
use strict;
my $bef = 4; # Кол-во слов до искомого слова
my $aft = 4; # Кол-во слов после искомого слова
my $str = "Mary had a very, very, very big pussy. It is a big black cat. Maybe.";
my( $sub_str ) = $str =~ /((?:\w+?(?:\W?)?\s*?){$bef}(?:\bpussy\b)(?:\.+?)?\s*?(\w+?(?:\W?)?\s+?){$aft})/i;
print $sub_str;

Если что-то не понятно и есть желание понять, дай знать.
Удачи.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)