Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 4107|回复: 1

TRegExprEngine

[复制链接]

该用户从未签到

发表于 2011-2-9 13:50:50 | 显示全部楼层 |阅读模式
我是lazarus 新手。
请假牛人关于TRegExprEngine 的知识。
有这方面材料推荐吗?
谢谢
回复

使用道具 举报

该用户从未签到

发表于 2011-2-18 12:37:10 | 显示全部楼层

lazarus 的正则是不完整的,凑合着用吧

下面是测试用的源代码,在邮件列表里拿到的.邮件列表是被墙了的.
program testreg1;
uses
   regexpr;

var
   r : tregexprengine;
   index,len : longint;

procedure do_error(i : longint);

  begin
     writeln('error near ',i,' index: ',index,' len: ',len);
     halt(1);
  end;

begin
   writeln('*** Testing unit regexpr ***');

   { basic tests }

   r:=GenerateRegExprEngine('[A-Z]',[]);
   if not(RegExprPos(r,'234578923457823659GHJK38',index,len)) or
     (index<>18) or (len<>1) then
     do_error(1000);
   DestroyregExprEngine(r);

   r:=GenerateRegExprEngine('[A-Z]*',[]);
   if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
   { is this result correct ??? }
     (index<>0) or (len<>0) then
     do_error(1002);
   DestroyregExprEngine(r);

   r:=GenerateRegExprEngine('[A-Z]+',[]);
   if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
     (index<>18) or (len<>5) then
     do_error(1003);
   DestroyregExprEngine(r);

   r:=GenerateRegExprEngine('[A-Z][A-Z]*',[]);
   if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
     (index<>18) or (len<>5) then
     do_error(1004);
   DestroyregExprEngine(r);

   r:=GenerateRegExprEngine('[A-Z][A-Z]?',[]);
   if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
     (index<>18) or (len<>2) then
     do_error(1005);
   DestroyregExprEngine(r);

   r:=GenerateRegExprEngine('[^\\d]+',[]);
   if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
     (index<>18) or (len<>5) then
     do_error(1006);
   DestroyregExprEngine(r);

   { test chaining }

   r:=GenerateRegExprEngine('[A-Z][A-Z]?[A-Z]',[]);
   if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
     (index<>18) or (len<>3) then
     do_error(1007);
   DestroyregExprEngine(r);

   r:=GenerateRegExprEngine('[A-Z][A-Z]*[0-9]',[]);
   if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
     (index<>18) or (len<>6) then
     do_error(1008);
   DestroyregExprEngine(r);

   r:=GenerateRegExprEngine('[A-Z]+[0-9]',[]);
   if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
     (index<>18) or (len<>6) then
     do_error(1009);
   DestroyregExprEngine(r);

   { case insensitive: }

   r:=GenerateRegExprEngine('[A-Z]',[ref_caseinsensitive]);
   if not(RegExprPos(r,'234578923457823659a38',index,len)) or
     (index<>18) or (len<>1) then
     do_error(1100);
   DestroyregExprEngine(r);

   { case insensitive: }
   r:=GenerateRegExprEngine('[a-z]',[ref_caseinsensitive]);
   if not(RegExprPos(r,'234578923457823659A38',index,len)) or
     (index<>18) or (len<>1) then
     do_error(1101);
   DestroyregExprEngine(r);

   { with parenthsis }
   r:=GenerateRegExprEngine('(foo)1234',[]);
   if not(RegExprPos(r,'1234   foo1234XXXX',index,len)) or
     (index<>7) or (len<>7) then
     do_error(1200);
   DestroyregExprEngine(r);

   r:=GenerateRegExprEngine('(((foo)))1234',[]);
   if not(RegExprPos(r,'1234   foo1234XXXX',index,len)) or
     (index<>7) or (len<>7) then
     do_error(1201);
   DestroyregExprEngine(r);

   r:=GenerateRegExprEngine('(foo)(1234)',[]);
   if not(RegExprPos(r,'1234   foo1234XXXX',index,len)) or
     (index<>7) or (len<>7) then
     do_error(1202);
   DestroyregExprEngine(r);

   { test real backtracking }

   r:=GenerateRegExprEngine('nofoo|foo',[]);
   if not(RegExprPos(r,'1234   foo1234XXXX',index,len)) or
     (index<>7) or (len<>3) then
     do_error(1300);
   DestroyregExprEngine(r);

   {
   r:=GenerateRegExprEngine('(nofoo|foo)1234',[]);
   if not(RegExprPos(r,'1234   nofoo1234XXXX',index,len)) or
     (index<>8) or (len<>9) then
     do_error(1008);
   DestroyregExprEngine(r);

   r:=GenerateRegExprEngine('(nofoo|foo|anotherfoo)1234',[]);
   if not(RegExprPos(r,'1234   nofoo1234XXXX',index,len)) or
     (index<>8) or (len<>9) then
     do_error(1009);
   DestroyregExprEngine(r);

   r:=GenerateRegExprEngine('nofoo1234|foo1234',[]);
   if (r.data=nil) or not(RegExprPos(r,'1234   foo1234XXXX',index,len)) or
     (index<>7) or (len<>7) then
     do_error(1010);
   DestroyregExprEngine(r);
   }
   writeln('*** Testing unit regexpr was successful ***');
end.
{
  $Log: testreg1.pp,v $
  Revision 1.4  2005/02/14 17:13:19  peter
    * truncate log

}
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2025-5-3 11:01 , Processed in 0.025093 second(s), 10 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表