模式匹配小算法

由于项目需要,最近写了一个模式匹配算法,支持%(代表一个或者任意个字符),_(代表一个字符)通配符号,自己在vc6下测试通过.

bool regexMatch(unsigned char* des ,int desLen ,unsigned char* source)
{
 
 int len = 0 ;
 unsigned char* tempSou = 0 ;
 unsigned char* tempDes = 0 ;
 int oldLoc ;// if it does not match , it will go back old location to found match word
 if (source == 0 || desLen == 0)
 {
  return false;
 }
 while(len < desLen)
 {
   if(*source == 0 && tempSou != 0) //if the target go to the end , go to the first % to continue to match
   {
    source = tempSou;
    des = tempDes++;
    len = oldLoc++;
   }
   else if (*source == '%')
   {
   tempDes = des;
   oldLoc = len;
   while(*source == '%') // if there are
   {
    source++;
    tempSou = source;
    if (*source == 0) //if the source is over with * , the source must match the destination string 
    {
     return true;
    }
   }
  }
  else if ( *source == *des || *source == '_') //match ,go next
  {
   source ++ ;
   des ++ ;
   len ++ ;
   if ( *source == 0 && len == desLen) // if match to the end of both
   {
    return true ;
   }
  }
  else   // there are words not match
  {
   if (tempSou == 0 )
   {
    return false ;
   }
   source = tempSou;
   len = oldLoc + 1 ;
   des = tempDes + 1;
   while(len < desLen) // get the location of the next matching
   {
    if (*source == '_' || *des == *source)
    {
     tempDes = des;
     oldLoc = len;
     break;
    }
    len ++ ;
    des ++ ;
   }
  }
 }
 if (*source) // if there are left % for example abc%%%%%
 {
  while(*source)
  {
   if (*source != '%')
   {
    return false;
   }
   source ++ ;
  }
  return true;
 }
 return false ;
}
 

测试:

abc
abc
true
abc
asdfsaf
false
safdasfasfasf
%
true
safdasfasfasf
_____________
true
safdasfasfasf
s%fa%
true
safdasfasfasf
s%fas%_f
true
ccccccc
c%cc%cc%c
true
ccccccc
c_%_%
true
ccccccc
c_c_c_c_%
false
ccccccc
c_c_c_c%%%
true
ccccccc
%%%%%%%%%%%%%%%%%%%%
true
asdfasfafahgdsfjkal;fjda;
a_s_a%;fj%_;
false
asdfasfafahgdsfjkal;fjda;
a_s_a%;fj%;
false
asdfasfafahgdsfjkal;fjda;
a%s_a%;fj%_;
true
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值