那么我们就来说说后者,顺便学习一下。
源文件与示例下载:http://regexpstudio.com/TRegExpr/TRegExpr.html
附加工具RegExpStudio下载:http://regexpstudio.com/RegExpStudio.html
正则表达式语法:http://regexpstudio.com/TRegExpr/Help/RegExp_Syntax.html
要使用他只需要添加RegExpr.pas到你的project(Delphi主菜单 Project -> Add to project..),然后在要使用正则的单元里申明就行了,如:
implementation
uses
RegExpr;
{$R *.DFM}
注意,最好添加在 implementation 之后,而不是 interface 之后。interface 后面使用的是系统自带的,而 implementation 后是自定义的。详细解说请看这里。
一个简单的示例,提取所有的邮箱的函数,调用此函数会返回文本里所有的邮箱:
function ExtractEmails(const AInputString: string): string;
const
EmailRE = '[_a-zA-Z\d\-\.]+@[_a-zA-Z\d\-]+(\.[_a-zA-Z\d\-]+)+';
var
r: TRegExpr;
begin
Result := '';
r := TRegExpr.Create;
try
r.Expression := EmailRE;
if r.Exec(AInputString) then
repeat
Result := Result + r.Match[0] + ',';
until not r.ExecNext;
finally
r.Free;
end;
end;
下面是我从 Help 文件里翻译出的一些主要接口的说明:(注:有英语大虾吗?希望那位英语大虾能全部都翻译出来。)
class function VersionMajor : integer;
返回主版本号。
class function VersionMinor : integer;
返回副版本号。
比如我下载的版本是 v0.944,那么 VersionMajor = 0、VersionMinor = 944,是无多大实际意义的方法啊。
function Exec (const AInputString : string) : boolean;
返回字符串 AInputString 是否匹配。
function ExecNext : boolean;
查找是否还有下一个匹配项。
property MatchPos [Idx : integer] : integer;
返回指定的匹配字符串的起始位置。
property MatchLen [Idx : integer] : integer;
返回指定的匹配字符串的长度。
property Match [Idx : integer] : string;
返回指定的匹配字符串。
function ReplaceRegExpr (const ARegExpr, AInputStr, AReplaceStr : string; AUseSubstitution : boolean = False) : string;
将匹配的所有字符串替换成 AReplaceStr 并返回。
另外 \n 表示回车,\s 表示空格,^ 表示取反,- 表示连接(如a-z,表示24个小写的英文字母),| 表示或,& 表示和。
还有很多方法,大家可以去参考示例文件和 Help 文件。