delphi - 检查字符串是否为正则表达式的其他方法
问题描述
我有这个函数来检查一个字符串是否是一个正则表达式并且它工作正常:
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;
问题是如果字符串值为假,它总是会引发调试器异常通知。我想消除那个通知。有一个选项可以在通知本身中忽略该异常,但我不想要它。尽可能多地调整代码。
解决方案
如果您想使用这种方法,那么您将无法避免 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 正则表达式库的源代码以了解如何在 XE2 中实现相同目标应该不会太难。
推荐阅读
- php - 使用 jAutoCalc 时动态表单插入 SQL php
- javascript - 如何使 onclick 函数与 jquery 一起工作?
- types - 将值从highestbars() 传递到lowestbars() 的问题
- c# - 在 OpenXML 中创建包含变量列的表
- python - 如何使用 pandas 合并多个数据框并为假人添加一列?
- python - 通过在列标题中查找唯一值来更新 csv 行中的“单元格”?
- amazon-web-services - 无法在 AWS 中 ping 域名
- android - MutableStateFlow 事件被覆盖
- http - Url 引擎重写 example.com/www 问题
- javascript - 使用 Promise 时将变量传递到外部作用域的最佳实践是什么?