-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathPatternMatching.pas
55 lines (40 loc) · 1.73 KB
/
PatternMatching.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
unit
PatternMatching;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
interface
type
TPatternMatching = class
public
class function Match(Element: PChar; Pattern: PChar): Boolean;
end;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
implementation
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
uses
SysUtils;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
class function TPatternMatching.Match(Element: PChar; Pattern: PChar): Boolean;
begin
if (StrComp(Pattern, '*') = 0) then Result := True else if (Element^ = Chr(0)) and (Pattern^ <> Chr(0)) then Result := False else if (Element^ = Chr(0)) then Result := True else begin
case Pattern^ of
'*': if Self.Match(Element, @Pattern[1]) then Result := True else Result := Self.Match(@Element[1], Pattern);
'?': Result := Self.Match(@Element[1], @Pattern[1]);
else if (UpCase(Element^) = UpCase(Pattern^)) then Result := Self.Match(@Element[1], @Pattern[1]) else Result := False;
end;
end;
end;
// --------------------------------------------------------------------------
//
// --------------------------------------------------------------------------
end.