随笔 - 1290  文章 - 26 评论 - 3121 trackbacks - 181

提示1: 点击 标题 可进入首页;   提示2: 从搜索引擎中搜索 万一 可迅速找到这里.

随笔分类(1439)

随笔档案(1244)

积分与排名

  • 积分 - 824498
  • 排名 - 19

最新评论

阅读排行榜

60天内阅读排行

在 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); //或 reg.Free
end;

posted on 2007-12-21 00:56 万一 阅读(4885) 评论(24)  编辑 收藏 网摘 所属分类: 40.Delphi 与正则表达式

FeedBack:
#1楼  2008-03-01 09:16 迷惑 [未注册用户]
nil是不是其他语言里的null啊?博主在么?
  回复  引用    
#2楼  2008-03-01 09:37 万一      
null 如果是个指针, 在 Delphi 中对应 nil
null 如果是个值, 在 Delphi 中对应 0

  回复  引用  查看    
#3楼  2008-07-27 14:43 ee [未注册用户]
学习下
  回复  引用    
#4楼  2008-08-12 23:56 欧阳蓝缺      
博主你好!
我对“FreeAndNil(reg); //因为建立时属主给了 nil, 这里没有使用 reg.Free”这行注释有些疑问:
1.为什么因为属主=nil,而没有使用reg.Free释放?
2.如果属主=nil,使用reg.Free会怎样?
3.如果属主<>nil,使用FreeAndNil和.Free有什么区别?(我知道FreeAndNil会将存放实例的变量.Free后:=nil,我现在所有的释放都用的FreeAndNil)
  回复  引用  查看    
#5楼 [楼主] 2008-08-13 00:04 万一      
@欧阳蓝缺
如果对象建立是有属主, 将会随属主一同释放.
  回复  引用  查看    
博主你好!
我对“FreeAndNil(reg); //因为建立时属主给了 nil, 这里没有使用 reg.Free”这行注释有些疑问:
1.为什么因为属主=nil,而没有使用reg.Free释放?
2.如果属主=nil,使用reg.Free会怎样?
3.如果属主<>nil,使用FreeAndNil和.Free有什么区别?(我知道FreeAndNil会将存放实例的变量.Free后:=nil,我现在所有的释放都用的FreeAndNil)


对这个我也有疑问,看了楼主的解释还是没有明白。



  回复  引用    
#7楼 [楼主] 2008-09-01 10:44 万一      
@学习一下
又看了一下, 觉得是原来的理解有问题, 已修正.
  回复  引用  查看    
万老师你好!
跟着老师学习正则表达示,按以上步骤操作,delphi2009也装上了单元文件,但运行测试时发现不正常,不知是那儿的原因。请老师指点一下,谢谢!
[DCC Error] PerlRegEx.pas(260): E2052 Unterminated string
[DCC Error] PerlRegEx.pas(261): E2010 Incompatible types: 'Char' and 'string'
[DCC Warning] PerlRegEx.pas(367): W1057 Implicit string cast from 'UTF8String' to 'string'
[DCC Warning] PerlRegEx.pas(368): W1057 Implicit string cast from 'UTF8String' to 'string'
[DCC Warning] PerlRegEx.pas(369): W1057 Implicit string cast from 'UTF8String' to 'string'
[DCC Warning] PerlRegEx.pas(370): W1057 Implicit string cast from 'UTF8String' to 'string'
[DCC Warning] PerlRegEx.pas(751): W1057 Implicit string cast from 'UTF8String' to 'string'
[DCC Warning] PerlRegEx.pas(756): W1057 Implicit string cast from 'UTF8String' to 'string'
[DCC Warning] PerlRegEx.pas(760): W1057 Implicit string cast from 'UTF8String' to 'string'
[DCC Warning] PerlRegEx.pas(784): W1057 Implicit string cast from 'AnsiString' to 'string'
[DCC Fatal Error] Unit1.pas(23): F2063 Could not compile used unit 'PerlRegEx.pas'
  回复  引用    
#9楼 [楼主] 2008-09-05 13:17 万一      
@靳承柱之靳承柱
在 Delphi 2009 中使用, 肯定要修改头文件.
先等官方升级吧.
  回复  引用  查看    
知道了,万老师,那就先学点别的,等官方做好了,再下载试试。谢谢万老师了。
  回复  引用    
#11楼  2008-09-19 15:42 fancy [未注册用户]
现在下载最新版的好像会出错
[MakeDir Error] 无法创建目录“R:\JGsoft\Bin\D2007”。未能找到路径“R:\JGsoft\Bin\D2007”的一部分。

怎么回事?
D2007+VISTA
  回复  引用    
#12楼  2008-09-19 16:11 guqiu [未注册用户]
@fancy
Options 中设置一下 Directories/Conditionals 选项
  回复  引用    
#13楼  2008-09-19 16:31 fancy [未注册用户]
@guqiu
改完后提示
没有找到pcre3.dll
  回复  引用    
#14楼  2008-09-23 09:45 withy [未注册用户]
freeandnil相当于object.free; object:=nil这两句,因为对象的free方法并不会释放对象指针。
  回复  引用    
#15楼  2008-11-16 17:08 nobird [未注册用户]
没安装delphi的电脑提示缺少pcre3.dll的问题怎么办呢?
  回复  引用    
#16楼 [楼主] 2008-11-16 17:36 万一      
@nobird 那只好携带它, 我还没注意这个问题呢. 讨厌携带 dll 的组件. 我刚才落实了一下: 之前的那个版本是可以不带 dll 的, 并且有源码. 现在的版本不行了.
  回复  引用  查看    
'没安装delphi的电脑提示缺少pcre3.dll的问题怎么办呢?'

放在pcre目录下呢,复制到包目录下
  回复  引用    
#18楼 [楼主] 2008-11-19 13:23 万一      
@汉字最好
我看了一下 pcre.pas 的源码, 把
pcre.pas、PerlRegEx.pas 和 pcre3.dll 都放在根目录即可.

我看的是 for 2009 版的. 如果是用以前的 for 2006-2007 版本, 可以不带 dll.

  回复  引用  查看    
#19楼  2008-11-19 13:38 heyongan [未注册用户]
万老师, 那天我用邮箱发给你的那问题,能帮我看看吗?...... 你有解决的方法吗?
  回复  引用    
看编译原理的正则表达式,看得云里雾里,
现在看这个怎么样
  回复  引用    
#21楼 [楼主] 2008-11-19 14:12 万一      
@heyongan
看了, 但没能解决, 问题应该在这句:
Alpha := Round((WidthPen[OldPenWNum-1+i] / PenWidth) * 255);
  回复  引用  查看    
#22楼  2008-11-19 14:27 heyongan [未注册用户]
是呀,就在这句,这边设置了透明度,然后遇到线冒叠加,颜色就加深了.....
万老师,GDI+有没有线冒叠加颜色加深的问题解决方案吗,或者说它有提供之类的操作..... 我那还有问题,就是 会出现断断继继的情况,那应该是笔宽落差太大而造成的,但但我笔宽落差用等差数列的方式把它将下来,就这样一个简单的方式,会使运行起来非常占用资源!....... 不知道是否其它可解决方法?。。。。
  回复  引用    
#23楼 [楼主] 2008-11-19 14:29 万一      
@heyongan
就本例来讲, 你试过不用线帽吗?
  回复  引用  查看    
#24楼  2008-11-19 14:35 heyongan [未注册用户]
试过了,GDI+的一些基本方法都试过了,但还是无法解决,只要一遇到笔迹相交处,颜色就加深了..... 而且我那种做法占用资源很多,而我这边有个软件,就是我发给你的那例子图,它占用资源很少,而且光滑度处理得很好,我仔细看它的笔迹,它也是有设置线冒的!
  回复  引用    
#25楼 [楼主] 2008-11-19 14:42 万一      
@heyongan
找时间我再看看.
  回复  引用  查看    
#26楼  2008-11-19 14:46 heyongan [未注册用户]
好的, 谢谢万老师!
  回复  引用    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-09-01 10:42 编辑过
Google站内搜索


China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!

相关文章:

相关链接: