博客统计信息

用户名:tigerii
文章数:5
评论数:19
访问量:4884
无忧币:20
博客积分:208
博客等级:2
注册日期:2009-09-10

我的技术圈(0)

更多>>
从简单规则的字符串中取回匹配字符串的简单方法
2009-09-19 09:27:10
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://tigerii.blog.51cto.com/934085/203278
在日常编程中,我们经常会遇到一些简单的字符串匹配问题,但是需要取回匹配的字符串,例如:“电话号码:+86-512-66668888”,我们希望把它匹配成国际区号=86,本地区号=512,电话号码=66668888,在这种简单规则的情况下,并不需要使用正则表达式。本文描述如何实现此简单算法。
 
由于我们只是实现简单的匹配规则,所以,我们只是用”?”代表一个字符,用“*”代表多个字符,做简单匹配,但是,由于我们不仅要测试是否匹配,还需要取回匹配的字符串值,这样,就需要把变量地址放入规则字符串,用“^”放在变量地址的头和尾,作为标记。在上例中,规则字符串表示为:“*+^addr1^-^addr2^-^addr3^”,其中addri=IntToStr(longint(addr(变量i))).
 
从上述描述中,我们也看到,这个简单算法并不处理多次匹配,也可称之为文本的行匹配算法。
 
那么如何实现呢?
1.            我们将规则字符串(strRule)和需要匹配的字符串(strToBeMatched)采用指针方式存储。
 
2.            指针iStrRule指向规则字符串的正在匹配的字符,jStrTBM指向需要匹配的字符串的匹配的字符,iStarStart规则字符串的多字符匹配的第一个字符,jStarStart指向需要匹配的字符串的多字符匹配时的第一个字符。就jAddrStart用于保存变量匹配时的需要匹配的字符串的第一个字符。
 
 
3.            分别处理规则字符串中*,?,^的情况和其他情况,设置变量isStarisAddr来标记现在是否是多字符匹配和变量匹配。
 
4.            需要处理的其他情况是:
   1)处理多字符匹配和变量匹配时的回退。
   2)处理iStrRule指向字符串末尾时的情况。
   3)处理jStrTBM指向字符串末尾时的情况。
    详细的实现,请见附件。
 
本文描述了如何处理简单规则的字符串匹配,并返回匹配的字符串,例如:“电话号码:+86-512-66668888”,我们希望匹配成功时,返回:国际区号=86,本地区号=512,电话号码=66668888。如有疑问,欢迎和我联系:TigerII@vip.sina.com

本文出自 “NothingImpossible” 博客,请务必保留此出处http://tigerii.blog.51cto.com/934085/203278

分享至
更多
一键收藏,随时查看,分享好友!
0人
了这篇文章

附件下载:
  source code
类别:未分类┆技术圈()┆阅读()┆评论() ┆ 推送到技术圈返回首页

文章评论

 
2009-09-21 22:23:22
学习了。

2009-09-22 15:44:06
非常有意思的一篇文章

 

发表评论            

【技术门诊】专家解析:软考重点难点及应试技巧
昵  称:
登录  快速注册
验证码:

请点击后输入验证码博客过2级,无需填写验证码

内  容: