实现正则表达式的*和?匹配

前端之家收集整理的这篇文章主要介绍了实现正则表达式的*和?匹配前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

前几天在用grep的时候,发现grep的*居然支持得有问题,并不能得到期望的结果,于是花了点时间,来实现正则表达式的×匹配,下面的这个函数可以匹配*,?。

代码很简短,但是很有效率。

  1. bool match_star(const char* text,const char* pattern)
  2. {
  3. const char *cp = text;
  4. const char* pp = pattern;
  5. const char *ps1,*ps2;
  6.  
  7. if ( !*pattern )
  8. return true;
  9.  
  10. while (*cp)
  11. {
  12. ps1 = cp;
  13. ps2 = pp;
  14.  
  15. while ( *ps1 && *ps2)
  16. {
  17. if(*ps2 == '*')
  18. {
  19. cp = ps1 - 1;
  20. pp = ps2+1;
  21. break;
  22. }
  23. else if(0 == (*ps1-*ps2) || *ps2 == '?')
  24. {
  25. ps1++;
  26. ps2++;
  27. }
  28. else
  29. {
  30. break;
  31. }
  32. }
  33.  
  34. if (!*ps2)
  35. {
  36. return true;
  37. }
  38.  
  39. cp++;
  40. }
  41. return false;
  42. }


在Windows VC2010和Linux G++上测试通过。

在实现匹配×的时候,使用了一个技巧,即相当于重新对两个新的字符串进行比较,抛弃了已经比较过的内容

比如字符串是1234567890,模式串是1*23*0以及1?3等都可以匹配成功。

如有问题,恳请指正,多谢!

猜你在找的正则表达式相关文章