正则匹配---C语言实现

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

实现一个能匹配,^,*,.,$,的正则表达式

  1. /************************************************************************* > File Name: mathRE.c > Author: guoqingyao > Mail: stepbystepto@163.com > Created Time: 2016年08月24日 星期三 21时28分15秒 ************************************************************************/
  2.  
  3. #include<stdio.h>
  4.  
  5. #define MATCH 1
  6. #define NOT_MATCH 0
  7.  
  8. int matchReHere(char *pcText,char *pcRe) ;
  9. int matchReStar(char* pcText,char cPreStar,char *pcEndStar );
  10.  
  11. int matchReStar(char* pcText,char *pcEndStar )
  12. {
  13. do
  14. {
  15. if( MATCH == matchReHere(pcText,pcEndStar) )
  16. {
  17. return MATCH;
  18. }
  19. }while ( ('\0' != pcText) && ('.' == cPreStar || cPreStar == *pcText++) );
  20.  
  21. return NOT_MATCH;
  22.  
  23. }
  24.  
  25. int matchReHere(char *pcText,char *pcRe)
  26. {
  27. /*一定要先判断 pcRe 是否结束,否则判断后一个是否为* 和 $ 就会越界*/
  28. if( '\0' == pcRe[0] )
  29. {
  30. return MATCH;
  31. }
  32. /*判断后一个是否为* 判断结束一定要在前面否则会越界 */
  33. if( '*' == pcRe[1] )
  34. {
  35. return matchReStar(pcText,pcRe[0],pcRe+2); /*当前字符是 pcRe[0],偏移一个是* 偏移到下一个才是*后面的字符 */
  36. }
  37. /* $结尾匹配 */
  38. if( '$' == pcRe[0] && '\0'==pcRe[1] )
  39. {
  40. if( '\0' == *pcText )
  41. {
  42. return MATCH;
  43. }
  44. else
  45. {
  46. return NOT_MATCH;
  47. }
  48. }
  49. /*. 或者相等的情况*/
  50. if( ( '\0' != pcText) &&
  51. ( ( '.' ==pcRe[0]) || ( *pcText == *pcRe) )
  52. )
  53. {
  54. return matchReHere(pcText+1,pcRe+1);
  55. }
  56.  
  57. return 0;
  58. }
  59.  
  60. int procMatchReEnter(char *pcText,char *pcRe)
  61. {
  62. if(NULL == pcText || NULL == pcRe )
  63. {
  64. return NOT_MATCH;
  65. }
  66. /*如果匹配第一个字符为 ^,直接向后匹配 */
  67. if( '^' == pcRe[0] )
  68. {
  69. return matchReHere(pcText,pcRe+1) ; // +1 越过 ^
  70. }
  71.  
  72. do
  73. {
  74. if( MATCH == matchReHere(pcText,pcRe) )
  75. {
  76. return MATCH;
  77. }
  78. }while( *pcText++ !='\0');
  79.  
  80. return NOT_MATCH ;
  81. }
  82.  
  83.  
  84. int main()
  85. {
  86. char *pcText = "zoooogss";
  87. char *pcRe = "^zo*gss$";
  88. if( MATCH == procMatchReEnter(pcText,pcRe))
  89. {
  90. printf("text =%s \r\n re =%s\r\n Matched\r\n",pcText,pcRe);
  91. }
  92. else
  93. {
  94. printf("text =%s \r\n re =%s\r\n not Matched\r\n",pcRe);
  95. }
  96. return 0;
  97. }

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