Immerhin sind nun RegEx von Haus aus dabei... endlich!
Da mag ich die andere Implementation aber lieber.
Und dieses TPerlRegEx ist ja nicht grade intuitiv benutzbar.
(brauchte 'ne Weile, um auf das .Subjekt zu kommen, als ich suchte, wie man dieses übergibt)
Delphi-Quellcode:
var
re: TPerlRegEx;
re2: IRegExp2;
// oder RegExp
re3: TRegEx;
re4: IRegEx;
begin
// unit: RegularExpressionsCore
re := TPerlRegEx.Create;
re.RegEx := '
[0-9]{2,}';
re.Options := [preCaseLess];
re.Subject := '
abc 1';
if re.Match
then ShowMessage('
1');
re.Subject := '
a 123';
if re.Match
then ShowMessage('
2');
re.Free;
// aber eigentlich sieht es so aus (zum Glück hat Delphi inzwischen
// soein "krankes" StringChecking und erweiterte Stringumwandlungen verbaut)
//
// da alles nur UTF-8 ist ... komisch, die C++-Klasse wurde mit UnicodeString
// erstellt, oder ist in C++ das UnicodeString ein UTF-8-String?
re := TPerlRegEx.Create;
re.RegEx := Utf8Encode('
[0-9]{2,}');
re.Options := [preCaseLess];
re.Subject := Utf8Encode('
abc 1');
if re.Match
then ShowMessage('
1');
re.Subject := Utf8Encode('
a 123');
if re.Match
then ShowMessage('
2');
re.Free;
// unit: DeclParserIntf > C:\Users\Public\Documents\RAD Studio\8.0\Samples\Delphi\VCL\ToolsAPI\Productivity
//
// Use the Regular Expression parser engine encapsulated in
// the VBScript library, as opposed to using freeware engines elsewhere
// which, I would have to seek the author's permission for inclusion.
// Requires: Microsoft Windows Script 5.6
re2 := CoRegExp.Create;
re2.Pattern := '
[0-9]{2,}';
re2.IgnoreCase := True;
if re2.Test('
abc 1')
then ShowMessage('
1');
if re2.Test('
a 123')
then ShowMessage('
2');
// unit: noch nicht veröffentlicht (by me)
//
// meines kann nativ mit Unicode und Ansi umgehn, daher sind keine Stringumwandlungen nötig
//
// man kann ein Pattern oder 'ne Expession verwenden,
// jenachdem wie die Klasse eingestellt/erstellt wurde
re3 := TRegEx.Create('
[0-9]{2,}', [remCaseLess]);
if re3.Match('
abc 1')
then ShowMessage('
1');
if re3.Match('
a 123')
then ShowMessage('
2');
re3.Free;
re3 := TRegEx.Create('
#[0-9]{2,}#i');
if re3.Match('
abc 1')
then ShowMessage('
1');
if re3.Match('
a 123')
then ShowMessage('
2');
re3.Free;
re4 := CoRegEx.Create('
#[0-9]{2,}#i');
if re4.Match('
abc 1')
then ShowMessage('
1');
if re4.Match('
a 123')
then ShowMessage('
2');
end;