반응형

중국어로 되어있음.

//查找是否存在
var
  reg: TPerlRegEx;
begin
  reg := TPerlRegEx.Create(nil);

  reg.Subject := 'CodeGear Delphi 2007 for Win32';
  reg.RegEx   := '\d';

  if reg.Match then
    ShowMessage('找到了')
  else
    ShowMessage('没找到');


  FreeAndNil(reg);
end;

//查找是否存在(方法2) var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg.Subject := 'CodeGear Delphi 2007 for Win32';   reg.RegEx  := '\d';   reg.Match; //执行查找   if reg.FoundMatch then  //布尔变量 FoundMatch 会告诉我们查找有没有结果     ShowMessage('找到了')   else     ShowMessage('没找到');   FreeAndNil(reg); end;
//显示找到的第一个 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg.Subject := 'CodeGear Delphi 2007 for Win32';   reg.RegEx  := '\d';   if reg.Match then     ShowMessage(reg.MatchedExpression)  //2   else     ShowMessage('没找到');   FreeAndNil(reg); end;
//分别显示找到的每一个和总数 var   reg: TPerlRegEx;   num: Integer; //用 num 来计数 begin   reg := TPerlRegEx.Create(nil);   reg.Subject := 'CodeGear Delphi 2007 for Win32';   reg.RegEx  := '\d';   num := 0;   while reg.MatchAgain do  //MatchAgain 是下一个   begin     ShowMessage(reg.MatchedExpression); //将分别显示: 2 0 0 7 3 2     Inc(num);   end;     ShowMessage(IntToStr(num)); //6   FreeAndNil(reg); end;
//分别显示找到的每一个和总数(另一种写法) var   reg: TPerlRegEx;   num: Integer; //用 num 来计数 begin   reg := TPerlRegEx.Create(nil);   reg.Subject := 'CodeGear Delphi 2007 for Win32';   reg.RegEx  := '\d';   num := 0;   if reg.Match then   begin     repeat       ShowMessage(reg.MatchedExpression); //将分别显示: 2 0 0 7 3 2       Inc(num);     until (not reg.MatchAgain);   end;     ShowMessage(IntToStr(num)); //6   FreeAndNil(reg); end;
//目标字符串的位置与长度 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg.Subject := 'CodeGear Delphi 2007 for Win32';   reg.RegEx  := 'Delphi';   while reg.MatchAgain do  //很明显: 本例只能找到一个结果   begin     ShowMessage(reg.MatchedExpression); //找到的字符串: Delphi     ShowMessage(IntToStr(reg.MatchedExpressionOffset)); //它所在的位置: 10     ShowMessage(IntToStr(reg.MatchedExpressionLength)); //它的长度: 6   end;   FreeAndNil(reg); end;

// MatchedExpression 与 SubExpressions[0]
var
  reg: TPerlRegEx;
begin
  reg := TPerlRegEx.Create(nil);

  reg.Subject := 'CodeGear Delphi 2007';
  reg.RegEx   := 'Delphi'; 

  while reg.MatchAgain do
  begin
    ShowMessage(reg.MatchedExpression); //Delphi; 这是匹配到的内容
    ShowMessage(reg.SubExpressions[0]); //Delphi; 也可以这样显示匹配到的内容
  end;
{
  SubExpressions 是一个数组:
  SubExpressions[1] 储存第 1 个表达式匹配的内容;
  SubExpressions[2] 储存第 2 个表达式匹配的内容;
  SubExpressions[n] 储存第 n 个表达式匹配的内容;

  SubExpressions[0] 储存整个表达式匹配的内容;

  MatchedExpression 表示的不过是 SubExpressions[0].
}

  FreeAndNil(reg);
end;

//提取子表达式匹配到的内容 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg.Subject := 'abc A1111 BB222 CCC33 DDDD4';   reg.RegEx  := '\b([A-D]+)([1-4]+)\b'; //这个表达式有两个子表达式构成   while reg.MatchAgain do   begin     ShowMessage(reg.SubExpressions[0]); //将分别显示: A1111 BB222 CCC33 DDDD4     ShowMessage(reg.SubExpressions[1]); //将分别显示: A BB CCC DDDD     ShowMessage(reg.SubExpressions[2]); //将分别显示: 1111 222 33 4     {另外:       reg.SubExpressionCount      是子表达式的个数;       reg.SubExpressionLengths[n] 是第 n 个表达式返回的字符串的长度;       reg.SubExpressionOffsets[n] 是第 n 个表达式返回的字符串在源字符串中的位置     }   end;   FreeAndNil(reg); end;


//设定搜索范围: Start、Stop
var
  reg: TPerlRegEx;
begin
  reg := TPerlRegEx.Create(nil);

  reg.Subject := 'ababab';
  reg.RegEx   := 'ab';
  reg.Replacement := '◆';

  reg.Start := 1;
  reg.Stop := 2;
  while reg.MatchAgain do
  begin
    reg.Replace;
  end;
  ShowMessage(reg.Subject); //返回: ◆abab


  reg.Subject := 'ababab';
  reg.Start := 3;
  reg.Stop := 4;
  while reg.MatchAgain do
  begin
    reg.Replace;
  end;
  ShowMessage(reg.Subject); //返回: ab◆ab


  reg.Subject := 'ababab';
  reg.Start := 5;
  reg.Stop := 6;
  while reg.MatchAgain do
  begin
    reg.Replace;
  end;
  ShowMessage(reg.Subject); //返回: abab◆

  FreeAndNil(reg);
end;

// Replace
var
  reg: TPerlRegEx;
begin
  reg := TPerlRegEx.Create(nil);

  reg.RegEx   := 'ab';
  reg.Replacement := '◆';

  reg.Subject := 'ababab';
  reg.ReplaceAll;
  ShowMessage(reg.Subject); //返回: ◆◆◆


  reg.Subject := 'ababab';
  //下面四行程序, 相当于 reg.ReplaceAll;
  while reg.MatchAgain do
  begin
    reg.Replace;
  end;

  ShowMessage(reg.Subject); //返回: ◆◆◆

  FreeAndNil(reg);
end;
{
  ReplaceAll 函数返回的是 Boolean;
  Replace 函数返回的是 Replacement 的值, 当然是不能赋值的, 它仅仅是返回值.
}

// Compile、Study
var
  reg: TPerlRegEx;
begin
  reg := TPerlRegEx.Create(nil);

  reg.RegEx   := 'ab';
  reg.Options := [preCaseLess];
  reg.Compile; {编译表达式}
  reg.Study; {Study 方法会检查是否编译, 如果没有编译则执行 Compile}

  reg.Replacement := '◆';
  reg.Subject := 'abAbaB';

  reg.ReplaceAll;
  ShowMessage(reg.Subject); {返回: ◆◆◆}

  FreeAndNil(reg);
end;

{
  编译表达式, 会加快执行速度、降低启动速度;
  如果表达式比较复杂而又多次执行, 应该先编译;
  编译内容包括表达式选项.
}



// EscapeRegExChars 函数可以自动为特殊字符加转义符号 \
var
  reg: TPerlRegEx;
begin
  reg := TPerlRegEx.Create(nil);

  reg.Subject := 'C++Builer';
  reg.RegEx   := reg.EscapeRegExChars('C+') + '{2}'; {相当于 'C\+{2}'}
  reg.Replacement := '◆';
  reg.ReplaceAll;

  ShowMessage(reg.Subject); {返回: ◆Builer}

  FreeAndNil(reg);
end;



//字符串分割: Split
var
  reg: TPerlRegEx;
  List: TStrings;
begin
  List := TStringList.Create;
  reg := TPerlRegEx.Create(nil);

  reg.Subject := 'aaa,bbb,ccc,ddd';
  reg.RegEx   := ','; {这里可是运行相当复杂的分割符啊}

  reg.Split(List,MaxInt); {第一个参数读入的是 Subject; 第二个参数是分成多少份}
  { 输入一个最大整数, 表示能分多少就分多少}

  ShowMessage(List.Text);
  {返回:
    aaa
    bbb
    ccc
    ddd
  }

  FreeAndNil(reg);
  List.Free;
end;




반응형
반응형