Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.06.30;
Скачать: CL | DM;

Вниз

Универсальная функция поиска по маске   Найти похожие ветки 

 
Vigi ©   (2011-05-19 14:28) [0]

Здрасти!
Что то не могу сообразить нужно сделать универсальную функцию поиска в тексте по маске!
текст (массив) будет иметь только числовые значения.

пример:
маска "aabbb"   = 77333 = 44111 и тд.
маска "aaxbb"   = 22033 = 99733 = 11422 и тд.
маска "ababab" = 121212 = 414141 и тд.
маска "xxxbb"  =  12377 = 10344 = 75622 ..

Есть мысли ? или уже есть готовое решение и не нужно выдумывать велосипед ?!


 
DVM ©   (2011-05-19 14:45) [1]


> Есть мысли ? или уже есть готовое решение и не нужно выдумывать
> велосипед ?!

http://regexpstudio.com/TRegExpr/TRegExpr.html


 
MBo ©   (2011-05-19 14:58) [2]


 function MatchesSmartMask(Mask, Value: string): Boolean;
 var
   i: Integer;
   Map: array[Char] of Char;
   ReverseMap: array["0".."9"] of Char;
 begin
   Result := False;
   if Length(Mask) <> Length(Value) then
     Exit;
   FillChar(Map, SizeOf(Map), 0);
   FillChar(ReverseMap, SizeOf(ReverseMap), 0);
   for i := 1 to Length(Mask) do
     if Mask[i] <> "x" then
       if Map[Mask[i]] = #0 then begin
         if ReverseMap[Value[i]] = #0 then begin
           Map[Mask[i]] := Value[i];
           ReverseMap[Value[i]] := Mask[i];
         end
         else if ReverseMap[Value[i]] = Mask[i] then begin
         end
         else
           Exit;
       end
       else if Map[Mask[i]] <> Value[i] then
         Exit;
   Result := True;
 end;

var
 i: Integer;
begin
 for i := 10000 to 20000 do
   if MatchesSmartMask("abxba", IntToStr(i)) then
     Memo1.Lines.Add(IntToStr(i));



 
Медвежонок Пятачок ©   (2011-05-19 15:17) [3]

маска "aabbb"  => "(\d)\1{1}(\d)\2{2}"
маска "aaxbb"  => "(\d)\1{1}\d(\d)\2{2}"

плюс исключить случаи :

aaaaa
и
aaabb
aabbb
aaaaa


 
Vigi ©   (2011-05-19 15:37) [4]


> if MatchesSmartMask("abxba", IntToStr(i)) then      Memo1.
> Lines.Add(IntToStr(i));


Польшое спс все работает !!!!



Страницы: 1 вся ветка

Текущий архив: 2013.06.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.005 c
2-1352808806
IGray
2012-11-13 16:13
2013.06.30
Как локально отключить перехват исключений Delphi IDE


15-1359991212
Kerk
2013-02-04 19:20
2013.06.30
ООП vs ФП


2-1352911408
1785
2012-11-14 20:43
2013.06.30
Перемещение выровненных компонентов по TPanel


15-1361133005
Юрий
2013-02-18 00:30
2013.06.30
С днем рождения ! 18 февраля 2013 понедельник


15-1360960202
Юрий
2013-02-16 00:30
2013.06.30
С днем рождения ! 16 февраля 2013 суббота