|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Konstantin Stupnik 2:5020/400 04 Sep 2001 14:45:58 To : vilfred Subject : Re: 2 Alexander Babanov about regex -------------------------------------------------------------------------------- Hi! "vilfred" <dmitriy@genphys.phys.msu.su> wrote in message news:9mvjpa$4un$1@host.talk.ru... > Привет!! > > Кажется работает. Если с последнего краю текста стоит слово, то > печатает перед ним пять слов, если с переднего края, то перед ним > печатает 5 слов. Hе знаю насколько это красиво конечно. И может оно > чихать будет на русских буквах. Кстати попробую. > > #!/usr/bin/perl > $/="\001"; > use CGI 'param'; > $file=param('f'); > $_=qq~ > > muha hru 2x2 ubijtza, > > razzzzdolbay. > fluder foreva, poubival bi, svolochi nenavigu. > > gadi, paraziti. Vo pole berezka stoyala, > > sednia vdrug vziala i upala. > > kolbasno! > ~; > $m=5; > $n=0; > if( > /(([,\.\n^\s\!]*\w*){$n,$m}?) > (\s*$file\s*) > (([\s,\.\n^\!]*\w+){$n,$m})/xo > ){ > print "$1 $3 $4\n"; > } > ----------------------------- Или я неправильно понял задачу, или это не совсем то. ИМХО окружающих слов _всегда_ должно быть $n. Если не хватает "перед", "после" должно быть побольше, что бы общее кол-во всё равно было $n. Кстати, про задачки. Можно ли одним регэкспом заматчить текст, содержащий определённое кол-во слов, в произвольном порядке. То есть: @word=qw(one two three); и регэксп матчил бы и "one two three" и "three --- two --- one". Hо не матчил бы "one two two" есс-но :) Вариант типа: /(one.*?two.*?three)|(one.*?three.*?two)|(two.*?one.*?three)..../ не принимается :) -- Best regards, Konstantin. Brainbench MVP for perl. Отправлено через сервер Talk.Ru - http://www.talk.ru --- ifmail v.2.15dev5 * Origin: Talk.Ru (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/648889fffc6a.html, оценка из 5, голосов 10
|