RTHtmlRegex.h
上传用户:qhonly
上传日期:2013-06-10
资源大小:487k
文件大小:3k
源码类别:

界面编程

开发平台:

Visual C++

  1. #pragma once
  2. class CRTHtmlRegex
  3. {
  4. public:
  5. CRTHtmlRegex(void)
  6. {
  7. }
  8. virtual ~CRTHtmlRegex(void)
  9. {
  10. }
  11. BOOL Match(const char * input,char ** start,char **end,char **next)
  12. {
  13. if(input == NULL)return NULL;
  14. if(*input == NULL)return NULL;
  15. char *ptr = (char *)input;
  16. while(*ptr != '')
  17. {
  18. if(*ptr == '<')break;
  19. ptr ++;
  20. }
  21. if(*ptr == '')return FALSE;
  22. ptr ++;
  23. while(*ptr != '' && *ptr != '>')
  24. {
  25. if(*ptr == 'h' || *ptr == 'H')
  26. {
  27. if(MatchHref(ptr,start,end,next))
  28. return TRUE;
  29. }
  30. else if(*ptr == 's' || *ptr == 'S')
  31. {
  32. if(MatchSrc(ptr,start,end,next))
  33. return TRUE;
  34. }
  35. ptr ++;
  36. }
  37. if(*ptr == '')return FALSE;
  38. ptr ++;
  39. return Match(ptr,start,end,next);
  40. }
  41. private:
  42. BOOL MatchHref(const char *input,char **start,char **end,char **next)
  43. {
  44. char *ptr = (char *)input;
  45. ptr++;
  46. if(*ptr != 'r' && *ptr != 'R')return FALSE;
  47. ptr++;
  48. if(*ptr != 'e' && *ptr != 'E')return FALSE;
  49. ptr ++;
  50. if(*ptr != 'f' && *ptr != 'F')return FALSE;
  51. //begin with href
  52. ptr ++;
  53. while(*ptr > 0 && *ptr < 33)
  54. ptr ++;
  55. if(*ptr != '=')return FALSE;
  56. ptr++;
  57. while(*ptr > 0 && *ptr < 33)
  58. ptr ++;
  59. return MatchLink(ptr,start,end,next);
  60. }
  61. BOOL MatchSrc(const char *input,char** start,char** end,char **next)
  62. {
  63. char *ptr = (char *)input;
  64. ptr++;
  65. if(*ptr != 'r' && *ptr != 'R')return FALSE;
  66. ptr++;
  67. if(*ptr != 'c' && *ptr != 'C')return FALSE;
  68. ptr ++;
  69. //begin with src
  70. while(*ptr > 0 && *ptr < 33)
  71. ptr ++;
  72. if(*ptr != '=')return FALSE;
  73. ptr++;
  74. while(*ptr > 0 && *ptr < 33)
  75. ptr ++;
  76. return MatchLink(ptr,start,end,next);
  77. }
  78. BOOL MatchLink(const char *input,char **start,char**end,char **next)
  79. {
  80. if(*input == NULL)return FALSE;
  81. char *ptr = (char *)input;
  82. char *ptrStart = NULL;
  83. char *ptrEnd = NULL;
  84. if(*ptr == '"')
  85. {
  86. ptr++;
  87. ptrStart = ptr;
  88. while(*ptr != '')
  89. {
  90. if(*ptr == '>')break;
  91. if(*ptr == '"' || *ptr == '#')
  92. {
  93.                     if(ptrEnd == NULL)ptrEnd = ptr;
  94. }
  95. ptr ++;
  96. }
  97. if(ptrEnd == NULL)return FALSE;
  98. }
  99. else if(*ptr == ''')
  100. {
  101. ptr++;
  102. ptrStart = ptr;
  103. while(*ptr != '')
  104. {
  105. if(*ptr == '>')break;
  106. if(*ptr == ''' || *ptr == '#')
  107. {
  108.                     if(ptrEnd == NULL)ptrEnd = ptr;
  109. }
  110. ptr ++;
  111. }
  112. if(ptrEnd == NULL)return FALSE;
  113. }
  114. else
  115. {
  116. ptr++;
  117. ptrStart = ptr;
  118. while(*ptr != '')
  119. {
  120. if(*ptr == '>')
  121. {
  122. if(ptrEnd == NULL)ptrEnd = ptr;
  123. break;
  124. }
  125. if(*ptr == '#' || (*ptr > 0 && *ptr < 33))
  126. {
  127.                     if(ptrEnd == NULL)ptrEnd = ptr;
  128. }
  129. ptr ++;
  130. }
  131. if(ptrEnd == NULL)return FALSE;
  132. }
  133. if(*ptr != NULL)ptr ++;
  134. *start = ptrStart;
  135. *end = ptrEnd;
  136. *next = ptr;
  137. return TRUE;
  138. }
  139. };