TperlRegEx 对象

用于匹配字符串的正则表达式对象, 需要另外下载安装

属性/方法 类型 描述
Subject String 要匹配的文本
RegEx String 正则表达式
Match() boolean 查找第一个匹配, 返回是否找到, 同时记入 FoundMatch
MatchAgain() boolean 查找其余的匹配, 返回是否找到, 同时记入 FoundMatch
FoundMatch boolean 上次查找是否找到匹配
Replace String 对查找到的一个匹配进行替换, 返回该匹配被替换成了什么
结果存入 Subject, 同时对 Stop 进行调整
ReplaceAll() boolean 进行替换全部, 结果存入 Subject
Replacement String 用于替换的文本, 可包含 $n 引用子串
MatchedExpression String 匹配的字符串
MatchedExpressionLength Integer 匹配的字符串长度
Start Integer 查找匹配的开始范围,Match() 后变化
Stop Integer 查找匹配的结束范围
SubExpressions String[] 匹配到的全部子串(下标0为整个匹配, 子串从1起)
SubExpressionLengths Integer[] 匹配到的全部子串长度
SubExpressionCount Integer 匹配到的子串个数

示例: 返回所有匹配

function GetAll(reg:TPerlRegEx;Subject,regEx:String):TStrings;
begin
  result := TStringList.Create;

  reg.Subject := Subject;
  reg.RegEx := regEx;;
  if reg.Match then
  begin
    while reg.FoundMatch do
    begin
      result.Add(reg.MatchedExpression);
      reg.MatchAgain;
    end;
  end;
end;
GetAll(r,'john marry 123 jason','\w+'); // 列出全部单词

示例: 替换所有

function ReplaceTo(reg:TPerlRegEx;Subject,regEx,rep:String):String;
begin
  reg.Subject := Subject;
  reg.RegEx := regEx;;
  reg.Replacement := rep;
  reg.ReplaceAll;

  result := reg.Subject;
end;
ReplaceTo(r,'john marry 1233 jason','(\w)\1','$1'); // 替换重复字母

示例: 返回子匹配

function GetSubAll(reg:TPerlRegEx;Subject,regEx:String):TStrings;
var
  i : Integer;
begin
  result := TStringList.Create;

  reg.Subject := Subject;
  reg.RegEx := regEx;

  if reg.Match then
  begin
    for i:=1 to reg.SubExpressionCount do
      result.Add(reg.SubExpressions[i]);
  end;
end;
GetSubAll(r,'2008-01-1','^(\d+)-(\d+)-(\d+)$'); // 拆解年月日