Я использую последние несколько лет http://www.yunqa.de/delphi/doku.php/products/regex/index. Работает очень быстро, как мне кажется. Развивается. Поддерживает много чего, в точ числе и perl-совместимые регулярные выражения.
Poseidon, можешь сам проверить. Вот ссылка на exe-шник http://rghost.ru/private/41859976/6669e8e230ba5dc2de1bc551e28b9ab5 в верхнее окошко вставляешь текст, в нижнее - выражение. Нажимаешь кнопку Match x1, а затем Count. Справа внизу, в строке статуса увидишь Execution time ..., ms
Добавлено через 6 минут и 54 секунды Poseidon, но количество тоже вычисляется примерно так, как ты:
| Код | procedure TfrmDIRegExWorkbench.btnCountClick(Sender: TObject); var c: Cardinal; t1, t2: Cardinal; begin if not Matching then begin Matching := True;
btnMatch.Enabled := False; btnMatch.Enabled := False; btnMatchNext.Enabled := False; btnMatchMultiple.Enabled := False; btnCount.Caption := 'Cancel';
try PrepareRegEx;
c := 0; t1 := GetTickCount; if FWorkRegEx.Match(StartOffset) >= 0 then begin t2 := GetTickCount; DisplayResult(t2 - t1, 1);
repeat Inc(c);// количество if c mod 100 = 0 then Application.ProcessMessages; until not Matching or not (FWorkRegEx.MatchNext >= 0);
end; t2 := GetTickCount;
Status('Count: ' + IntToStr(c), t2 - t1, c); finally btnMatch.Enabled := True; btnMatchNext.Enabled := FWorkRegEx.SubStrCount >= 0; btnMatchMultiple.Enabled := True; btnCount.Caption := '&Count'; Matching := False; end; end else Matching := False; end;
|
|