从简单规则的字符串中取回匹配字符串的简单方法

在日常编程中,我们经常会遇到一些简单的字符串匹配问题,但是需要取回匹配的字符串,例如:“电话号码: +86-512-66668888 ”,我们希望把它匹配成国际区号 =86 ,本地区号 =512 ,电话号码 =66668888 ,在这种简单规则的情况下,并不需要使用正则表达式。本文描述如何实现此简单算法。
 
由于我们只是实现简单的匹配规则,所以,我们只是用 ”?” 代表一个字符,用“ * ”代表多个字符,做简单匹配,但是,由于我们不仅要测试是否匹配,还需要取回匹配的字符串值,这样,就需要把变量地址放入规则字符串,用“ ^ ”放在变量地址的头和尾,作为标记。在上例中,规则字符串表示为:“ * +^addr1^-^addr2^-^addr3^ ”,其中 addri=IntToStr(longint(addr( 变量 i))).
 
从上述描述中,我们也看到,这个简单算法并不处理多次匹配,也可称之为文本的行匹配算法。
 
那么如何实现呢?
1.            我们将规则字符串( strRule )和需要匹配的字符串( strToBeMatched )采用指针方式存储。
 
2.            指针 iStrRule 指向规则字符串的正在匹配的字符, jStrTBM 指向需要匹配的字符串的匹配的字符, iStarStart 规则字符串的多字符匹配的第一个字符, jStarStart 指向需要匹配的字符串的多字符匹配时的第一个字符。就 jAddrStart 用于保存变量匹配时的需要匹配的字符串的第一个字符。
 
 
3.            分别处理规则字符串中 *,?,^ 的情况和其他情况,设置变量 isStar isAddr 来标记现在是否是多字符匹配和变量匹配。
 
4.            需要处理的其他情况是:
   1 )处理多字符匹配和变量匹配时的回退。
   2 )处理 iStrRule 指向字符串末尾时的情况。
   3 )处理 jStrTBM 指向字符串末尾时的情况。
    详细的实现,请见附件。
 
本文描述了如何处理简单规则的字符串匹配,并返回匹配的字符串,例如:“电话号码: +86-512-66668888 ”,我们希望匹配成功时,返回:国际区号 =86 ,本地区号 =512 ,电话号码 =66668888 。如有疑问,欢迎和我联系: [email protected]

你可能感兴趣的:(职场,软件开发,休闲,取回匹配字符串)