Delphi(程序人生)

Delphi Programer DoubleCat

导航

正则表达式的用法(PerlRegEx)

Delphi与正则表达式

-------------------------------------------------------------------------------------------

在 Delphi 中使用正则表达式, 目前 PerlRegEx 应该是首选, 准备彻底而细致地研究它.


官方网站: http://www.regular-expressions.info/delphi.html
直接下载: http://www.regular-expressions.info/download/TPerlRegEx.zip


安装方法:

1、先把解压的 TPerlRegEx 文件夹放一个合适的地方, 我放在了 Delphi 的 Imports 目录中.

2、目前最新 For Win32 的版本是对 Delphi 2006 的, 2007 也能用. 
    打开 PerlRegExD2006.dpk, 提示缺少资源文件, 没关系; 
    在 Project Manager 窗口中的 PerlRegExD2006.bpl 上点击右键, 执行 Install;
    这时在 Tool Palette 的列表中已经有了 TPerlRegEx, 在 JGsoft 组.

3、Tools -> Options -> Environment Options -> Delphi Options -> Library-Win32 -> Library path -> 
    添加路径: ...\Imports\TPerlRegEx

4、可以使用了! 直接 uses PerlRegEx 或从 Tool Palette 添加都可以.
    如果不喜欢 Tool Palette 的添加方式可以省略第二步.


计划的学习步骤: 1、正则语法; 2、TPerlRegEx 功能.

字符替换



//先测试一下:
uses
PerlRegEx; //uses 正则表达式单元

procedure TForm1.FormCreate(Sender: TObject);
var
reg: TPerlRegEx; //声明正则表达式变量
begin
reg := TPerlRegEx.Create(nil); //建立

reg.Subject := 'sSsS';    //这是要替换的源字符串
  reg.RegEx   := 's';       //这是表达式, 在这里是准备替换掉的子串
  reg.Replacement := '◆';  //要替换成的新串
  reg.ReplaceAll;           //执行全部替换

ShowMessage(reg.Subject); //返回替换结果: ◆S◆S

FreeAndNil(reg); //因为建立时属主给了 nil, 这里没有使用 reg.Free
end;

字串的绝对匹配用法


 

procedure TForm1.Button1Click(Sender: TObject);
begin
  with PerlRegEx1 do begin
                       RegEx:=Edit1.Text;
                       Subject:=Edit2.Text; //匹配属生的RegEx与Subject
                       if Match then ShowMessage('Match') else ShowMessage('Not Match');
                     end;
end;


字串替换的用法
------------------------
with PerlRegEx1 do begin
  Subject := 'Bill loves Hillary';
  RegEx := 'Hillary';
  Replacement := 'Monica';
  if Match then Replace;
  ShowMessage(Subject);   // "Bill loves Monica"
end;

-------------------------------------------------
任意匹配
----------------
with PerlRegEx1 do begin
  Subject:='linux';
  RegEx := 'Windows|Linux';  // Matches 'Windows' or 'Linux', whichever comes first
  if Match then Label1.Caption := MatchedExpression + ' rulez!';
end;

-------------------
Option->CaseLess->True->不区分大小写,否则区分大小写
_____________________________________________________
字符匹配
-------------
with PerlRegEx1 do begin
  Subject := 'Rating: AAA';
  RegEx := 'A+';  // Matches the first occurence of 'A', including any A's that may follow right after it
  if Match then Label1.Caption :=
    'You have been rated with ' + IntToStr(MatchedExpressionLength) + 'A''s'
  else
    Label1.Caption := 'You have a poor rating';
end;

只要出现A就匹配成功!
______________________________
取得匹配字串前面的字串,当也可以取得后面的字串
----------------------------------
with PerlRegEx1 do begin
  Subject:='HaHa Bye  Hei Hei';
  RegEx := 'Bye';
  if Match then Label1.Caption := 'Before typing "Bye", you typed: ' +
    Copy(Subject, 1, MatchedExpressionOffset-1);
end;

--------------------------------
第一个字符为大写的匹配方式
---------------------------------

with PerlRegEx1 do begin

  Subject := 'I like to hang out at Foo bar';

  RegEx := '([A-Za-z]+) bar';//([A-Za-z]+) 这个表示第一个字符大写,后面不管

  Replacement := '     \1 is the name of the bar I like';

  if Match then Replace;

  ShowMessage(Subject);

end;


分裂字串(把一个字串按指定分隔号裂开)
---------------------------------加如文本------
One,Two,Three,Four
你, 我, 他
你们, 我们, 他们

----------------------------------------------
procedure TForm1.Button2Click(Sender: TObject);
begin
  PerlRegEx1.Subject:=Memo1.Lines.GetText;
  PerlRegEx1.RegEx:=',';
  PerlRegEx1.Split(Memo2.Lines,0);
end;

-----裂开后,每个子字串都占一行-------------
One
Two
Three
Four

 我
 他
你们
 我们
 他们

----------代码如下-----------------
begin
  PerlRegEx1.Subject:=Memo1.Lines.GetText;
  PerlRegEx1.RegEx:=',';
  PerlRegEx1.Split(Memo2.Lines,0);//0表示源字串中的所有子字串
end;

----------------------------------
这个功能在做文本数据库时最好用->把文本裂开后存入数据表中

posted on 2008-06-14 02:45  DoubleCat  阅读(1235)  评论(0编辑  收藏  举报