我有此功能来检查字符串是否为正则表达式,并且工作正常:
function IsValidRegEx(aString: string): Boolean;
var
aReg : TRegEx;
begin
Result := False;
if Trim(aString) = '' then
begin
Exit;
end;
try
aReg := TRegEx.Create(aString);
if aReg.IsMatch('asdf') then
begin
end;
Result := True;
except
end;
end;
问题是,如果字符串值是false,它将始终引发调试器异常通知。我想消除该通知。有一个选项可以忽略通知本身中的该异常,但是我不想要它。将尽可能地调整代码。
如果要使用这种方法,则无法避免Delphi正则表达式库引发异常。您需要深入研究Delphi用于实现其正则表达式库的PCRE库。例如:
{$APPTYPE CONSOLE}
uses
System.RegularExpressionsAPI;
function IsValidRegEx(const Value: UTF8String): Boolean;
var
CharTable: Pointer;
Options: Integer;
Pattern: Pointer;
Error: PAnsiChar;
ErrorOffset: Integer;
begin
CharTable := pcre_maketables;
Options := PCRE_UTF8 or PCRE_NEWLINE_ANY;
Pattern := pcre_compile(PAnsiChar(Value), Options, @Error, @ErrorOffset, CharTable);
Result := Assigned(Pattern);
pcre_dispose(Pattern, nil, CharTable);
end;
begin
Writeln(IsValidRegEx('*'));
Writeln(IsValidRegEx('.*'));
Readln;
end.
请注意,我已经用Delphi XE7编写了此代码,因为我无权访问XE2。如果该代码无法编译,那么研究Delphi regex库的源代码以找出如何在XE2中实现相同功能就不会太困难。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句