一、DIRegEx 是什么?
DIRegEx 是 Devart 公司开发的一个用于 Delphi 和 C++ Builder 的第三方正则表达式组件库。它的核心是基于著名的 PCRE(Perl Compatible Regular Expressions) 库。
简单来说,它让 Delphi 开发者能够在其应用程序中使用与 Perl 语言高度兼容、功能丰富且高性能的正则表达式功能,弥补了早期 Delphi 版本中自带 TRegEx(基于 PCRE 的官方版本在较新的 Delphi 中才引入)或 TPerlRegEx 组件的不足或性能上的差距。
二、为什么选择 DIRegEx?(主要特点与优势)
基于 PCRE
- 高度兼容: 支持 Perl 5 及其后续版本中绝大部分强大的正则语法和特性。
- 功能丰富: 支持命名捕获组、零宽断言(Lookahead/Lookbehind)、递归模式、条件子模式等高级特性。
高性能
- DIRegEx 对原始的 PCRE C 库进行了深度的优化和 Delphi 原生化,使其在匹配速度上通常优于其他一些 Delphi 正则表达式实现。
- 它提供了预编译功能,可以将正则表达式模式编译成一个内部结构,在需要多次使用同一模式时,能极大提升效率。
Unicode 完全支持
- 完全支持 Unicode,包括 UTF-8、 UTF-16 等编码,这对于现代多语言应用程序至关重要。
易于使用的组件和类
- 提供了
TDIRegEx组件(可拖放到窗体上)和TPerlRegEx类(可用于纯代码),满足不同开发者的习惯。 - 接口设计直观,属性如
RegEx(模式)、Subject(要匹配的文本)、Options(选项)等都非常清晰。
- 提供了
强大的功能集
- 匹配: 查找文本中符合模式的子串。
- 替换: 使用指定的内容替换匹配到的文本,支持反向引用(如
$1,$2或\1,\2)。 - 分割: 根据模式将文本分割成多个部分。
- 研究: 分析正则表达式模式本身,帮助调试。
三、核心用法简介
以下是一些使用 DIRegEx 的基本代码示例。
示例 1:基本匹配(检查字符串是否符合邮箱格式)
uses
PerlRegEx;
var
RegEx: TPerlRegEx;
begin
RegEx := TPerlRegEx.Create(nil);
try
// 设置正则表达式模式
RegEx.RegEx := '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';
// 设置要匹配的字符串
RegEx.Subject := 'user@example.com';
// 执行匹配
if RegEx.Match then
ShowMessage('这是一个有效的邮箱地址!')
else
ShowMessage('这不是一个有效的邮箱地址!');
finally
RegEx.Free;
end;
end;
示例 2:提取所有匹配项(找出文本中所有数字)
var
RegEx: TPerlRegEx;
begin
RegEx := TPerlRegEx.Create(nil);
try
RegEx.RegEx := '\d+'; // 匹配一个或多个数字
RegEx.Subject := '我的电话是123,你的电话是456。';
// 循环匹配所有结果
while RegEx.MatchAgain do
begin
// RegEx.MatchedText 包含当前匹配的文本
ShowMessage('找到数字: ' + RegEx.MatchedText);
end;
finally
RegEx.Free;
end;
end;
示例 3:替换文本(隐藏手机号中间四位)
var
RegEx: TPerlRegEx;
begin
RegEx := TPerlRegEx.Create(nil);
try
RegEx.RegEx := '(\d{3})(\d{4})(\d{4})'; // 捕获组1、2、3
RegEx.Subject := '我的手机号是13812345678。';
// 使用替换字符串,$1, $2, $3 代表捕获组
RegEx.Replacement := '$1****$3';
if RegEx.Replace then
begin
// 替换后,Subject 属性包含了替换后的结果
ShowMessage(RegEx.Subject); // 输出:我的手机号是138****5678。
end;
finally
RegEx.Free;
end;
end;
示例 4:使用 TDIRegEx 组件
- 从组件面板将
TDIRegEx拖放到窗体上。 - 在代码中设置其属性并调用方法。
// 假设你已经在窗体上放置了一个名为 DIRegEx1 的组件
procedure TForm1.Button1Click(Sender: TObject);
begin
DIRegEx1.RegEx := EditPattern.Text; // 从编辑框获取模式
DIRegEx1.Subject := MemoText.Lines.Text; // 从Memo获取文本
if DIRegEx1.Match then
begin
ShowMessage('找到匹配!');
// 可以通过 DIRegEx1.MatchedText 获取匹配文本
// 通过 DIRegEx1.SubExpressionCount 和 DIRegEx1.SubExpressions[i] 获取捕获组
end;
end;
DIRegEx v8.17.0 for Delphi 11-13 Florence Full Source.7z
类型:压缩文件|已下载:1|下载方式:免费下载
立即下载




还没有评论,来说两句吧...