من بعد از یه جستجوی کوچیک یه همچین کدی رو برای دلفی تهیه کردم:
procedure TForm1.FindStyle(searchMe : string);
var
RegEx: TRegEx;
Match: TMatch;
Group: TGroup;
I: integer;
begin
RegEx := TRegEx.Create(Edit1.Text, [roIgnoreCase,roMultiline]);
Match := RegEx.Match(searchMe);
if not Match.Success then
begin
// Memo2.Lines.Add('No Match Found');
exit;
end;
while Match.Success do
begin
Memo2.Lines.Add('Match: [' + Match.Value + ']');
if Match.Groups.Count > 1 then
begin
for I := 1 to Match.Groups.Count -1 do
Memo2.Lines.Add(' Group[' + IntToStr(i) + ']: [' + Match.Groups.Item[i].Value + ']');
end;
Match:= Match.NextMatch;
end;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
I: Integer;
S: String;
begin
for I := 0 to Memo1.Lines.Count - 1 do
begin
S:= Memo1.Lines[I];
FindStyle(S);
end;
end;
در این کد، experssion موجود در Edit1 رو در محتوای Memo1 جستجو می کنه و نتیجه رو در Memo2 نمایش میده.
برای همون مثال قبل، من با کد به نتیجه رسیدم:
(?<G1>\d\d) (?<G2>\N) (?<G1>\d\d\d)
اما در این بین به یه مشکلی برخوردم. وقتی برای تست، متن اولیه رو شماره پلاک ماشین قرار دادم، اعداد بعد از حرف «ع»، به صورت فارسی نوشته شدند که در سرچ، پیدا نشدند:
Sheme.jpg
هر چند جابجایی ارقام، فقط در ظاهر هست و در باطن به همون فرمت پلاک هست؛ اما مشکل اصلی در فارسی شدن ارقام هست که کلا محدوده جستجو رو خیلی پیچیده می کنه.