
15.09.2012, 19:55
|
 |
Начинающий
|
|
Регистрация: 17.02.2006
Адрес: Казахстан
Сообщения: 172
Версия Delphi: XE
Репутация: 1500
|
|
Модуль:
Код:
unit RegExp;
interface
uses
{Standart}
SysUtils, Windows, Classes,
{Special}
PerlRegEx;
type
TRegExp = class
private
FRegExp: TPerlRegEx;
protected
property RegExp: TPerlRegEx read FRegExp write FRegExp;
public
function Match(Exp, Text: UTF8String): UTF8String; overload;
function Match(Exp, Text: UTF8String; Group: Integer): UTF8String; overload;
procedure Match(Exp, Text: UTF8String; Results: TStrings); overload;
function Replace(Exp, Text, Replacement: UTF8String): UTF8String;
function Count: Integer;
function Offset(Group: Integer): Integer;
function Length(Group: Integer): Integer;
function Result(Group: Integer): UTF8String;
constructor Create;
destructor Destroy; override;
end;
implementation
{ TRegExp }
constructor TRegExp.Create;
begin
inherited Create;
FRegExp := TPerlRegEx.Create;
end;
destructor TRegExp.Destroy;
begin
FreeAndNil(FRegExp);
inherited Destroy;
end;
function TRegExp.Match(Exp, Text: UTF8String): UTF8String;
begin
Result := '';
RegExp.Subject := Text;
RegExp.RegEx := Exp;
if RegExp.Match then
Result := RegExp.MatchedText;
end;
function TRegExp.Match(Exp, Text: UTF8String; Group: Integer): UTF8String;
begin
Result := '';
RegExp.Subject := Text;
RegExp.RegEx := Exp;
if RegExp.Match then
Result := RegExp.Groups[Group];
end;
procedure TRegExp.Match(Exp, Text: UTF8String; Results: TStrings);
var
i: Integer;
begin
Results.Clear;
RegExp.Subject := Text;
RegExp.RegEx := Exp;
if RegExp.Match then
repeat
Results.Add(RegExp.MatchedText);
until not RegExp.MatchAgain;
end;
function TRegExp.Replace(Exp, Text, Replacement: UTF8String): UTF8String;
begin
Result := '';
RegExp.Subject := Text;
RegExp.RegEx := Exp;
RegExp.Replacement := Replacement;
if RegExp.ReplaceAll then
Result := RegExp.Subject;
end;
function TRegExp.Count: Integer;
begin
Result := RegExp.GroupCount;
end;
function TRegExp.Offset(Group: Integer): Integer;
begin
Result := RegExp.GroupOffsets[Group];
end;
function TRegExp.Length(Group: Integer): Integer;
begin
Result := RegExp.GroupLengths[Group];
end;
function TRegExp.Result(Group: Integer): UTF8String;
begin
Result := RegExp.Groups[Group];
end;
end.
Использование:
Код:
var
RegExp: TRegExp;
Pattern: string;
begin
RegExp := TRegExp.Create;
try
Pattern := 'http\:\/\/cfire\.mail\.ru\/images\/userbars\/(.+?)\/389x80\.jpg';
TempString := Utf8ToAnsi(RegExp.Match(AnsiToUtf8(Pattern), AnsiToUtf8(HTML.Text), 1));
. . .
Как-то так.
|