Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Andrey Sapozhnikov                   2:5020/400     03 Aug 2000  12:57:31
 To : All
 Subject : Re: Hаименее общий паттерн
 -------------------------------------------------------------------------------- 
 
 vitus@ice.ru wrote:
 
 > 
 > Dmitry Startsev <startsev@x4u.lebedev.ru> wrote:
 > DS>Вот скажем есть слово "мультиканальный".
 > DS>Ему можно сопоставить паттерны
 > DS>/мультик.*/
 > DS>/му.*/
 > DS>/м.*/
 > DS>ну и массу всяких других.
 > DS>Как имея _неупорядоченный_ набор таких паттернов найти
 > 
 > Упорядочить их. Посредством поматчить друг с другом.
 > Т.е . если /м.*/=~ "мультик.*" то м.* - меньше.
 
 Hе выйдет. 
 /^[Мм]у/ и /к$/ никак не матчатся.
 
 А наименее общее можно найти так.
 
 1. Переписать все паттерны чтобы они:
   а) Покрывали ВСЮ строку.
   б) Все "общие" соответствия обернуть скобками.
   (т.е. /му/ => /^(.*)му(.*)/ )
 
 2. Применить к слову все паттерны по-очереди.
   (т.е. my @cmn=$word=~/^(.*)му(.*)/; )
 
 3. посчитать длину "общих" соответствий.
   my $len=0;
   map { $len+=length} @cmn;
 
 4. У кого длина меньше - тот более конкретный,
   у кого больше - общий.
 Андрей
 
 P.S. Можно и не покрывать всю строку. При этом
 my $len=length($word)-length($&);
 
 P.P.S. Переписать регексп автоматом довольно сложно.
 Оставляю в качестве домашнего задания :-)
 --- ifmail v.2.15dev5
  * Origin: Chelindbank (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Hаименее общий паттерн   Dmitry Startsev   03 Aug 2000 00:44:17 
 Re: Hаименее общий паттерн   vitus@ice.ru   03 Aug 2000 10:28:21 
 Re: Hаименее общий паттерн   Andrey Sapozhnikov   03 Aug 2000 12:57:31 
 Hаименее общий паттерн   alexander smishlajev   04 Aug 2000 07:15:22 
Архивное /ru.perl/52846dc25a61.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional