Форум: "Основная";
Текущий архив: 2013.06.30;
Скачать: [xml.tar.bz2];
ВнизУниверсальная функция поиска по маске Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.002 c